最近同事在学Python+selenium UI自动化,遇到一些问题,其中有个涉及iframe切换的问题,记录下方面有需要的人可以参考查阅。
从他问题描述和代码,代码思路清晰,自己打开https://www.126.com/ 网址
发现这个需要先点击登入密码,所以,他的代码少了一个动作,点击 密码登入 的操作,这个简单,加一个点击密码登入的代码操作就行
#点击 密码登入
driver.find_element_by_id("switchAccountLogin").click()
然后进入用户密码登入界面
【问题】
加上点击密码登入,进入用户密码登入页面,接着直接执行上面的代码,会提示元素定位不到
1、以为是元素没加载出来,加了延时sleep()、显式等待都不行2:然后想着是否定位出了问题
换了 xpath 定位 、 相对定位、 css定位、 find_elements_by_tag_name 、find_elements_by_class_name ,都不行,一样报找不到元素 。
没用 id 元素定位,因为 id是动态id,肯定不行
然后想到可能是iframe的问题,细心查看下,果然是:
用户登入输入框在不在当前iframe,需要切换到这个iframe里面才能操作
问题找到了:接就是怎么切换到这个iframe了,发现这个iframe元素没有 classs,有name但没值
id 也是动态的,怎么定位好呢??
ok,方法是有的, 我们在这通过 by_tag_name 方法定位到iframe进行切换
driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))
切换后,再执行,OK好了,元素能定位到了,输入框成功执行了输入操作
PS:附上代码
第25——26行完整代码:
#显式等待元素出现再执行操作
#element= WebDriverWait(driver,10).until(expected_conditions.visibility_of(driver.find_element_by_xpath('//*[@id="login-form"]/div/div[1]/div[2]/input')))
# element.send_keys("123")
以上有不同的定位方式, 元素定位,相对定位 ,xpath定位 等
PS:补充
行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 786229024,里面有各种测试开发资料和技术可以一起交流哦。
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。