webdriver element not visible 的一种解决方法
2017-12-28 14:14
731 查看
org.openqa.selenium.ElementNotVisibleException: element not visible
加了等待时间后仍然报错,记录在使用过程中的处理方法,并最终运行正常以下是html代码片断,是一个单选框,要定位的是input type=”checkbox”
<span class="ant-checkbox"> <input type="checkbox" class="ant-checkbox-input" value="on"> <span class="ant-checkbox-inner"></span> </span>
正常情况下:
driver.findElements(By.className("ant-checkbox-input"))
但是报错了
org.openqa.selenium.ElementNotVisibleException: element not visible
尝试加等待时间并使用js点击:
JavascriptExecutor js = (JavascriptExecutor) driver; WebElement checkbox = driver.findElement(By.className("ant-checkbox-input")); js.executeScript("arguments[0].click();", checkbox);
结果:代码指行没有报错,但从页面上观察并未点击到,这个方法在此使用无法通过。
分析:可能在页面上存在多个相同属性的checkbox,在html里直接搜索classname的属性值,检查有多少个,使用谷歌浏览器,在console里输入document.getElementsByClassName(‘ant-checkbox-input’);,回车,显示如下:
以上说明含有相同属性的元素一共有13个。由此,可以确定,直接定位的时候并不是想要的那一个。
知道原因就好办了,有两种方法:
-# 找出目标是第几个,用list准确定位到目标元素。这种方法的缺点也显而易见,就是以后前端代码有改变,那么我需要重新定位在第几个
List<WebElement> checkboxs = driver.findElements(By.className("ant-checkbox-input")); checkboxs.get(i).click();
-# 循环点击所有checkbox,正确点击后,停止。这种方法就可以避开顺序位改变后,我们不需要修改。缺点是需要确认第一次的点击就是我们需要目标元素
List<WebElement> checkboxs = driver.findElements(By.className("ant-checkbox-input")); System.out.println("checkboxs num is " + checkboxs.size()); for(int i=0; i <checkboxs.size(); i++){ System.out.println(checkboxs.get(i).getAttribute("outerHTML")); try { checkboxs.get(i).click(); break; } catch (ElementNotVisibleException e) { continue; } }
我使用了第二种方法。我先从业务上做了筛选,使页面尽量少出现checkbox,并做到,第一次点击是我需要元素。
到此,解决了element not visible的问题,记录下来。
相关文章推荐
- Webdriver Element is not currently visible 解决方法
- Webdriver Element is not currently visible and so may not be interactedwith 解决方法
- 【WebDriver】解决ElementNotVisibleException方法总结
- selenium webdriver使用过程中出现Element is not currently visible and so may not be interacted with的处理方法
- WebDriver遇到Element is not currently visible and so ...解决
- selenium +Python 测试时报 “Element is not visible”解决方法
- Element is not currently visible and so may not be interactedwith 解决方法
- Firefox上运行自动化测试脚本提示元素无法点击“WebDriverException: Message: Element is not clickable at point“解决方法
- selenium webDriver: Element is not currently visible and so may not be interacted with
- webdriver遇见的can not XXOO webdriver解决方法
- 解决webdriver(Element not found in the cache - perhaps the page has changed since it was looked up )
- 使用 webdriver报错 ElementNotInteractableException: Message: 的解决办法
- Webdriver如何解决页面元素过期:org.openqa.selenium.StaleElementReferenceException: Element not found in the cache - perhaps the page has changed since it was looked up
- Ajax.net 错误 Could not load type 'Microsoft.Web.Extensions.Design.Dll'解决方法.
- 【开源自动化测试疑难FAQ】【WebDriver】封装GET方法来解决页面跳转不稳定的问题
- java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 解决方法
- pdo 连接数据库 报错 could not find driver 解决方法
- Could not load db driver class: com.mysql.jdbc.Driver解决方法
- webdriver 调用IE浏览器报错解决方法
- java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 解决方法