selenium有frame时找元素

web自动化最麻烦的就是找页面元素了,因为很多时候都找不到。刚开始接触web自动化测试,也是摸索中学习,说说我在测试时遇到有frame时,定位frame里面的元素定位不到的一个问题的解决办法。


image.png

一开始使用的是定位出元素,右键-copy-copy xpath去定位


image.png

代码实现就是这样:
image.png

其中//*[@id="rrapp"]/div[1]/div[2]/div[1]/div/input 就是直接粘贴过来的。运行时总是报错找不到元素:


image.png

我仔细查看了浏览器上F12出现的html文件内容,发现有两个id为rrapp的元素,而目前要定位的这个元素,刚好就在第二个id为rrapp的元素下层标签中。
再来看下直接copy xpath之后的内容//*[@id="rrapp"]/div[1]/div[2]/div[1]/div/input ,当前路径下,找到id为rrapp的元素,之后跟上具体的路径,但是有两个id值一样时,这个xpath肯定就有问题了,后来我又试着用class找,补全元素的路径(就当@id="rrapp"找到的是第一个,补全元素到第一个id为rrapp的路径),通过文字“搜索机构名称”都没有找到。
之后是一个同事说这个需要切进入frame,去frame里面找元素,于是就试了下,果然可以。


image.png

代码实现


image.png

这次执行确实是成功了。但是目前的就在frame里面了,如果再要在主页面上点击元素,还需要再切回到主页面,使用方法:
broswer.switch_to.default_content()
如果是嵌套的frame框架,返回到上一层的frame,使用方法:
driver.switch_to.parent_frame()

类似这个样子:


image.png

推荐阅读更多精彩内容