比如有些元素在底部,需要拖动滚动条才能看到,那么问题是如何判断该元素是否在当前视图内?如果不在,才拖动滚动条查找,不知道那判断语句怎么写,请大神帮忙指导下,谢谢
wait.until(ExpectedConditions.elementToBeClickable(webElement)).isEnabled(); ---->打印为true(备注:不管该元素是否在当前视图内,只要能找到该元素,打印结果都是true)
webElement.isDisplayed() ;---->打印结果是true(备注:不管该元素是否在当前视图内,只要能找到该元素,打印结果都是true)
但webElement.click(); 运行报错,element is not clickable at point (513, 807).
原因是webElement不在当前视图,需要拖动滚动条就可见了,因此添加一条语句:
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", webElement);------>就可以正常click了
但问题来了,若该元素在当前视图,执行 ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", webElement);后会滚动页面,导致找不到那元素了,因此也报错:element is not clickable at point 。
那么我想写一个判断语句,判断该元素是否在当前视图内?
捕获一下异常,例如:
try:
element.cick()
catch:
拖动滚动条。
点击。
#1 楼 @tongshanshanshan
try{
loginBtn.click();
}
catch(WebDriverException e){
String s = e.getMessage();
if(s.contains("Element is not clickable at point"))
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", loginBtn);
loginBtn.click();
}
可以了,,谢谢
#1 楼 @tongshanshanshan 这是一种解决方法,可是感觉有些风险,可是就没有一个判断语句,是判断该元素是否在当前视图内的不?我百度了好多语句都不行
driver.getPageSource() 好像有这么个方法
可以用 is_displayed() 方法
element is not clickable at point 这个异常是有元素遮挡导致的。所以 js 可以执行,你滚动了后 click 执行也是不可以的。
#9 楼 @tongshanshanshan 通用的方法。就是如何判断某元素是否在当前视图内的判断语句不知道怎么写
#11 楼 @sophia_super 没有遮挡,拖动滚动条就可以看到了,js 拖动滚动条找到那元素后 click 是可以的,,,但问题是加了那 js 后,对于当前视图内的元素 也滚动了导致找不到那元素了
#14 楼 @sophia_super
((JavascriptExecutor) driver).executeScript("arguments[0].Element.scrollIntoViewIfNeeded(true);", loginBtn);
报错:unknown error: Cannot read property 'scrollIntoViewIfNeeded' of undefined
这个就是有元素遮挡了,要用 js 进行点击
#18 楼 @sophia_super 明白要用 js 进行点击,那怎么判断元素是否遮挡了呢?
https://testerhome.com/topics/7382
我之前请教的类似的问题,应该可以借鉴一下