运用js解决java selenium元素定位问题

一、解决定位并操作uneditable元素

尝试了通过id,xpath等等定位元素后点击都提示Element is not clickable at point

再看了下可以click的元素发现上面有onClick事件

查看了一下元素是span

几番操作都不行,最后还是请教的大神,通过js脚本来操作

其实浏览器中可以F12,然后同等的输入js脚本,点击Enter,发现页面会有函数对应的页面操作

将js脚本同等移动到java中

$("[data-date='2016-10-26']").mousedown()发现通过上面的js脚本可以模拟到在uneditable元素上面进行点击操作

((JavascriptExecutor) driver).executeScript("$(\"[data-date='2016-10-26']\").mousedown()");

如果这句看不懂的可以去补一下jQuery的知识点,我也是查阅jQuery才看懂的

二、顺带介绍一下js操作滚动条

String high = "scroll(0,1000)";

((JavascriptExecutor) driver).executeScript(high);

当然上面的这种写法有点多次一举,完全可以放在一句里面执行

((JavascriptExecutor) driver).executeScript("window.scroll(0,1000");

当然更加智能一点的方法是

((JavascriptExecutor) driver).executeScript("window.scroll(0,document.body.scrollHeight)");

((JavascriptExecutor) driver).executeScript("在此放入你的js脚本");

还有更加活用的直接根据页面元素的位置来移动浏览器的滚动条

比如移动某元素的顶部与浏览器齐平

((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView();", element);

移动某元素的底部与浏览器齐平

((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(false);", element);

js脚本会有$符号,记得带上“”将$涵盖,同时对于脚本语句里面有"的,要带上转义

由此得知,js脚本还是很强大的

三、有的时候你遇到的js前端代码真的特别无语

比如对于这种<a class=button search_button set_button btn btn-green>Test</a>

里面有很多空格而且这个元素也没有对应的js响应事件

这个时候就需要补充一下js前端知识

告诉一个巧的方法,关于如何找到这个元素上面的触发事件

a元素里面有文本Test,可以在对应js里面搜索到文本Test所在的位置,然后查阅一下js上下文,结合js+jQuery的知识,你就可以找到包裹的触发事件了

比如我找到的是这种

$(".set_button", infoElement).click(function(){。。。}

很显然可以通过$(".set_button").cick()来模拟a元素的点击