首页 文章

Selenium - 在iFrame中获取WebElement时出错

提问于
浏览
0

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

  • 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')]
    

    要么

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

    要么

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

    要么

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

    希望它能帮到你:)

  • 0

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

  • 0

    使用此xpath

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

相关问题