Selenium踩坑记之iFrame的定位与切换

Selenium是浏览器自动化测试的工具之一,用过的人都懂他的好,也被他坑的不要不要的。今天就聊聊Selenium的iFrame定位和切换。
对于一个页面,正常浏览的时候,看到的一个完整正常的页面,但是,看似是整体的页面的背后,其中是可能会包含iFrame。正因为此,在编写自动化测试的时候,定位元素就出问题了。

如何定位iFrame

  • 在页面区域右键,可以看到“This Frame”或者“Reload Frame”的选项,那么就可以确定这里是一个iFrame了
  • 通过查看页面的HTML代码,查找Frame标签
  • 如果你还想再简单点,那就是直接编写一个简单的测试,然后直接只用以下的代码(以ruby为例)来验证:
p @driver.find_elements(:tagName => "frame").size

如何切换iFrame

其实如果确定了iFrame之后,切换的代码就很简单了(以ruby代码为例):

@driver.switch_to.frame(iFrame)

iFrame这里可以是三个类型:

  1. index,即整个页面中frame的个数的index,从0开始。比如页面中只有一个iFrame,就是0,两个这是0和1
@driver.switch_to.frame(1)
  1. Name or ID,这个无需多说,就是frame的这个name或者ID
@driver.switch_to.frame(frameName)
  1. 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中都可以顺利的测试起来……

参考:Handling iFrames in Selenium Webdriver

你可能感兴趣的:(Selenium踩坑记之iFrame的定位与切换)