我正在使用Selenium Chrome WebDriver最后一个版本构建一个小型自动化测试脚本,但现在当我尝试在iFrame中获取WebElement时,即使我切换到它也面临一个问题。
这是构建HTML的方式:
正如您可以查看的那样,还有另一页"镶嵌"在iFrame中,按钮定义如下(它是我选择的部分):
这是我用来获取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中获取页面元素吗?
答案 0 :(得分:1)
您可以使用以下方法实际选择iFrame: -
因此,您可以通过传递有关帧的任何上述信息进行切换。是的,您需要根据需要的操作每次切换
实施例: -
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')]