测试过程中,控制台报错,提示某个元素不可点击:unable to be clicked这样的
网上查了下,可能是元素被某些弹出层遮盖住了。正好这个页面在上一步按钮操作后,会有一个弹出提示“XXX操作成功”,但是3m后就自动消失。一开始以为是我代码执行的时候,不到3m的时候,就去点击弹出层下面的元素,所以才会报错失败。然后设置了长达10m的等待时间,可是依旧会有一定几率会失败。
为什么是一定几率呢?为什么不是次次都失败呢?是不是我元素定位的方式不够稳定?反复试验跑脚本后发现,因为我使用的是双屏,偶尔弹出的浏览器,我会拖动到大屏幕上查看测试执行的效果,这个时候脚本执行是不会失败的;但是在原有的主屏(笔记本是小屏)上,就会失败。
通过手工去做页面操作,发现当该页面在小屏上显示时,我要操作的元素其实是被web端一个底栏给遮盖住的,并不是弹出提示。而使这个元素不被遮盖的方法,就是滑动滚动条,让该元素上移到屏幕可显示的位置上,再去点击该元素。
此时需要使用js来操作滚动条操作,而且滚动条操作并不是针对全页面的,只是针对某一个div层。所以需要定位到该操作层,然后只对该操作层使用滚动条,使用到的js操作是:
((JavascriptExecutor) driver).executeScript("document.getElementById(\"page-content\").scrollTop=10000");
需要注意的是,js里面获取元素getElement,只有三种方法:ById,ByTagNmae,ByName,没有bypath的方法。
如果想操作全页面滚动,可以使用:
((JavascriptExecutor)driver).executeScript("document.documentElement.scrollTop=10000");
网友评论