Selenium - 在iFrame中获取WebElement时出错

我正在使用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)

2 years ago

您可以使用以下方法实际选择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')]

要么

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

要么

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

要么

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

希望它能帮到你:)

2 years ago

我是selenium的新手,但看起来你的按钮实际上是'span'而xpath不会像这样工作,试试 //span[contains(text(),'Asociar Siniestro')]

2 years ago

使用此xpath

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