我们在做自动化测试过程中经常会遇到控件定位不到的情况,具体抛出的错误信息如下:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"name","selector":"email"}
复制代码
但是,我们来看看页面代码,再看看自己写的代码
emailName = driver.find_element_by_name('email')
复制代码
没错呀,这个错不了的呀,应该肯定能定位到的,那么一般就会有几种原因吧,第一种就是等待时间不够,第二种就是多窗口,第三种肯定就是iframe了。
我们顺腾模块,往上找会发现,哦,确实有iframe呀。。。
那么有iframe怎么处理呢,如果我们的iframe有id或者name的话,并且id或者name的属性值不为空的话,并且id和name的属性值不是动态变化的话,
我们就可以直接通过如下进行切入到iframe中:
driver.switch_to.frame('x-URS-iframe')
复制代码
如果id或者name是动态的呢,何为动态的呢,比如像如下的id属性值
id="auto-id-1604073488440"
复制代码
这种怎么办?无所谓,随便用一种定位方式先定位到iframe,然后再切入
dd = driver.find_element_by_xpath("//div[@id='loginDiv']/iframe")
driver.switch_to.frame(dd)
emailName = driver.find_element_by_name('email')
复制代码
此时就大功告成了。。
当然如果想从iframe切出来,那么怎么办?
driver.switch_to.parent_frame(【编测编学】第一届软件测试挑战赛等你报名参加赢大奖!)#从子frame切回到父frame
driver.switch_to.default_content()#切回主文档