Selenium - 在iFrame中获取WebElement时出错

时间:2017-09-05 12:37:49

标签: html selenium iframe automated-tests

我正在使用Selenium Chrome WebDriver最后一个版本构建一个小型自动化测试脚本,但现在当我尝试在iFrame中获取WebElement时,即使我切换到它也面临一个问题。

这是构建HTML的方式:

HTML part

正如您可以查看的那样,还有另一页"镶嵌"在iFrame中,按钮定义如下(它是我选择的部分):

Inner Button

这是我用来获取WebElement的方式(显然是失败的):

WebElement frameAperturar = 
driver.findElement(By.xpath("//iframe[@title='Aperturar']"));

driver.switchTo().frame(frameAperturar);

asociarSiniestroButton = driver.findElement(By.xpath("//button[@aria-label='Asociar Siniestro']"));
asociarSiniestroButton.click();

这是我尝试获取WebElement时遇到的异常:

no such element: Unable to locate element: {"method":"xpath","selector":"//button[@aria-label='Asociar Siniestro']"}

(会话信息:chrome = 60.0.3112.113)

我知道在切换到框架后如何在iFrame中获取页面元素吗?

3 个答案:

答案 0 :(得分:1)

您可以使用以下方法实际选择iFrame: -

  • 帧(指数)
  • frame(帧的名称[或]帧的ID)
  • frame(WebElement frameElement)
  • defaultContent()

因此,您可以通过传递有关帧的任何上述信息进行切换。是的,您需要根据需要的操作每次切换

实施例: -

driver.SwitchTo().Frame(0);

driver.SwitchTo().Frame("top");

....在框架上执行您的操作

driver.SwitchTo().defaultContent();

driver.SwitchTo().Frame("navigation");

....在框架上执行您的操作

driver.SwitchTo().defaultContent();

尝试以下XPath

//span[@class='apexButtonText' and contains(.,'Asociar Siniestro')]

OR

//span[contains(text(),'Asociar Siniestro')]

OR

//span[@class='apexButtonText'][contains(text(),'Asociar Siniestro')]

OR

//button[@aria-label='Asociar Siniestro']//span[contains(.,'Asociar Siniestro')]

希望它会对你有所帮助:)。

答案 1 :(得分:0)

我是硒的新手,但看起来你的按钮实际上是跨越了#39;并且xpath不会像这样工作,请尝试//span[contains(text(),'Asociar Siniestro')]

答案 2 :(得分:0)

使用此xpath

//span[@class='apexButtonText'][contains(text(),'Asociar Siniestro')]