Selenium踩坑记之iFrame的定位与切换
转自:https://www.jianshu.com/p/6e7d0359e4bb
Selenium是浏览器自动化测试的工具之一,用过的人都懂他的好,也被他坑的不要不要的。今天就聊聊Selenium的iFrame定位和切换。
对于一个页面,正常浏览的时候,看到的一个完整正常的页面,但是,看似是整体的页面的背后,其中是可能会包含iFrame。正因为此,在编写自动化测试的时候,定位元素就出问题了。
如何定位iFrame
- 在页面区域右键,可以看到“This Frame”或者“Reload Frame”的选项,那么就可以确定这里是一个iFrame了
- 通过查看页面的HTML代码,查找Frame标签
- 如果你还想再简单点,那就是直接编写一个简单的测试,然后直接只用以下的代码(以ruby为例)来验证:
@driver.find_elements(:tagName => "frame").size
如何切换iFrame
其实如果确定了iFrame之后,切换的代码就很简单了(以ruby代码为例):
@driver.switch_to.frame(iFrame)
iFrame这里可以是三个类型:
- index,即整个页面中frame的个数的index,从0开始。比如页面中只有一个iFrame,就是0,两个这是0和1
@driver.switch_to.frame(1)
- Name or ID,这个无需多说,就是frame的这个name或者ID
@driver.switch_to.frame(frameName)
- Web Element,即通过css或者xpath等方式定位元素来进行切换
@driver.switch_to.frame(@driver.find_element(:xpath => "//iframe[contains(@id, 'frame')]"))
嵌套iFrame
很多时候,你可能还会遇到嵌套的iFrame的情况,嗯,其实情况也很好办,一直切换就好了。不过,还要记得如何切换回上层的iFrame呢?
@driver.switch_to.parentFrame
或者 切换到main frame
@driver.switch_to.defaultContent
嗯,有了以上的这些方法,基本可以跳过Selenium中的iFrame相关的坑了。预祝各位在Selenium中都可以顺利的测试起来……