在做Web自动化测试的时候经常会遇到元素定位不到的问题,结合实例总结一下原因和解决方法:
1.由于iFrame或者Frame的原因无法定位
实例:163邮箱登录页面,发现邮箱和密码的inputbox识别不到,登录btn也识别不到
初始脚本:
driver.find_element_by_name('email').send_keys("daisywang0726")
driver.find_element_by_name('password').send_keys("God1010andy")
driver.find_element_by_id('dologin').click()
原因分析:
查看页面发现是这三个元素是嵌入的iframe里边的,WebDriver只能识别一个页面中的元素,对于嵌入页面的元素是无法直接识别到的,如下图:
解决方案:
当元素处于iframe中,需要先跳转到iframe中才能被识别,如下:
调用_switch_to.frame()跳转进iframe。
driver._switch_to.frame(0)
driver.find_element_by_name('email').send_keys("daisywang0726")
driver.find_element_by_name('password').send_keys("God1010andy")
driver.find_element_by_id('dologin').click()
driver._switch_to.default_content()#driver.switch_to.parent_frame()切换到上一层frame,driver.switch_to.derault_content()跳回到最外层页面
2.由于iFrame或者Frame的原因无法定位
原因:由于没有设置等待时间,想要定位的元素还没有加载出来,导致无法定位。
解决方法:Selenium提供三种等待方式来实现:
- 强制等待sleep()
- 隐式等待implicitly_wait()
- 显示等待WebDriverWait()
详细实现方式请查看https://www.cnblogs.com/daisyatcnblog/p/12337092.html |