Selenium总是提示定位不到元素该怎么解决?
公司:#小米 #美团
岗位:#自动化测试工程师
关键字:#元素定位 #元素定位问题解决 #脚本设计
1、看看是不是有frame/iframe嵌套。 WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌的页面元素无法直接定位。 解决方法:driver.switch_to.frame(id/name/obj)。 switch_to.frame()默认可以直接取表单的id或name属性。如果没有可用的id和name属性,可以先定位到frame/iframe,再将定位对象传给switch_to.frame(对象)方法。
2、页面跳转到新的标签页,或者弹出的警告框等。在页面操作过程中有时候点击某个链接会弹出新窗口,这时就需要切换焦点到新窗口上进行操作。 解决方法:对于JavaScript生成的alert、confirm以及prompt,无法使用前端工具对弹出窗口进行定位的,使用driver.switch_to.alert方法定位弹出框。
3、页面元素失去焦点导致脚本运行不稳定。 解决方法:driver.switch_to.active_element 遇到脚本不稳定,有时会失去焦点导致测试失败的情况下,可以先切到焦点元素再进行操作。
4、使用Xpath或CSS定位。find_element_by_xpath("//标签[属性='值']")使用Xpath/CSS方法,非常适合定位属性值动态生成、不容易定位的元素。如果不想指定标签,则可以使用“*”代替,使用xpath不局限于id、name和class这三个属性,元素的任意属性值都可以使用,只要它能唯一的标识一个元素。 解决方法:如果一个元素没有唯一属性,那么我们可以一级一级向上查找,直到找到可以唯一定位元素的属性,再向下查找其子元素。
5、页面还没有加载出来,就对页面上的元素进行的操作。因为加载元素延时造成的脚本失败,我们可以通过设置等待时间来提升自动化脚本的稳定性。 解决方法1:WebDriverWait() 显示等待。等待单个的元素加载,通常配合until()、until_not()方法使用。
6、元素被遮挡,不可用,不可见。 解决方法1:driver.maximize_window() 由于窗口大小改变引起的页面元素布局发生变化,被测元素被遮挡,可以先将窗口最大化,再进行元素定位。
7、使用WebDriver调用JavaScript代码代替无法实现的功能。对于有些WebDriver没有提供的方法或者无法实现的功能,WebDriver提供了driver.execute_script()方法来执行JavaScript代码。 解决方法:如果页面内容过长,窗口最大化也无法查看到所有元素,可以通过执行JavaScript脚本实现滚动条的拖动等动作。