![cbcfdc29fb68f4dd5bcb6c51d7daed53.png](https://i-blog.csdnimg.cn/blog_migrate/050e96dc4a690994d3b5526964fcb377.jpeg)
最近同事在学Python+selenium UI自动化,遇到一些问题,其中有个涉及iframe切换的问题,记录下方面有需要的人可以参考查阅。
![874c89f4e7c03c71e0462151b1a194e0.png](https://i-blog.csdnimg.cn/blog_migrate/2c04ba38294232ca96a5cf75f3ab1968.png)
从他问题描述和代码,代码思路清晰,自己打开https://www.126.com/ 网址
![12fc722eba88c23adeedddd6ec509739.png](https://i-blog.csdnimg.cn/blog_migrate/d3c833bba4c7a8c373c6a732aebb1b91.png)
发现这个需要先点击登入密码,所以,他的代码少了一个动作,点击 密码登入 的操作,这个简单,加一个点击密码登入的代码操作就行
#点击 密码登入
driver.find_element_by_id("switchAccountLogin").click()
然后进入用户密码登入界面
【问题】
加上点击密码登入,进入用户密码登入页面,接着直接执行上面的代码,会提示元素定位不到
![66d5d6735da48947f4e3f593ed044e34.png](https://i-blog.csdnimg.cn/blog_migrate/9978ae5a12fad4f9bc1b5a31ce44d9d1.png)
1、以为是元素没加载出来,加了延时sleep()、显式等待都不行2:然后想着是否定位出了问题
换了 xpath 定位 、 相对定位、 css定位、 find_elements_by_tag_name 、find_elements_by_class_name ,都不行,一样报找不到元素 。
没用 id 元素定位,因为 id是动态id,肯定不行
![d84472831780818b2d731b81c8c05516.png](https://i-blog.csdnimg.cn/blog_migrate/0de0105b3047ac6cfd404165539a811a.png)
然后想到可能是iframe的问题,细心查看下,果然是:
![cbcbba72008054bef1a8d2ee6198b9d2.png](https://i-blog.csdnimg.cn/blog_migrate/b0bb65559f3b497e04ab0d921c365edc.jpeg)
用户登入输入框在不在当前iframe,需要切换到这个iframe里面才能操作
问题找到了:接就是怎么切换到这个iframe了,发现这个iframe元素没有 classs,有name但没值
id 也是动态的,怎么定位好呢??
![4b23335c82683307ef1a38e62890483b.png](https://i-blog.csdnimg.cn/blog_migrate/db5ae89b5587c8f240cedb043495f8b6.png)
ok,方法是有的, 我们在这通过 by_tag_name 方法定位到iframe进行切换
driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))
切换换,再执行,OK好了,元素能定位到了,输入框成功执行了输入操作
PS:附上代码
![332c559fefef0f4d2dfa8ac91aec2173.png](https://i-blog.csdnimg.cn/blog_migrate/f19a2f9ce7225fb32da2e2a43480ef3c.png)
第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:补充
![c287db48f56bf1baa9718dc424f15fd0.png](https://i-blog.csdnimg.cn/blog_migrate/9f5257327dc17e1af28b98adac45ab82.png)
![ec9f79eff25240964791c3c690ff56f8.png](https://i-blog.csdnimg.cn/blog_migrate/356e62c20ea9d705b286b8a087897794.png)
------------END--------------
好东西要分享给小伙伴哦
![35f72ba66990a6dad9097c99df6658f0.png](https://i-blog.csdnimg.cn/blog_migrate/ca6b185f037a748a15181a3e335f224f.png)
加糖糖微信,每周一11点会在朋友圈放送技术公开课哦~
(别忘了留言参与抽奖哦)
你可能还想看
软件测试到底在学什么(职业发展概览)
面试中的工具问题 看这一篇就够了
面试官:
请你说说微信发红包,有哪些测试点
MySQL学习笔记1-关系数据库概述
![e7cdcdf93748bc28277b00f8ca72d037.png](https://i-blog.csdnimg.cn/blog_migrate/f2e515fdfd7943432eb12a62f5b51f84.jpeg)