【问题标题】:Selenium - Error getting WebElement within iFrameSelenium - 在 iF​​rame 中获取 WebElement 时出错
【发布时间】:2018-02-13 18:17:11
【问题描述】:

我正在使用 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 中获取页面元素吗?

【问题讨论】:

  • 您遇到的错误是什么
  • 这是我得到的异常:“没有这样的元素:无法找到元素:{“method”:“xpath”,“selector”:“//button[@aria-label='Asociar Siniestro']"}(会话信息:chrome=60.0.3112.113)(驱动程序信息:chromedriver=2.32.498550(9dec58e66c31bcc53a9ce3c7226f0c1c5810906a),平台=Windows NT 6.1.7601 SP1 x86_64)(警告:服务器未提供任何堆栈跟踪信息) "
  • 更新了我的答案

标签: html selenium iframe automated-tests


【解决方案1】:

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

【讨论】:

  • 他确实有一个具有相同类的按钮,所以他的 xpath 是正确的,但可能是点击的控制可能不是那个元素,因此你的 xpath 可以工作
【解决方案2】:

使用这个 xpath

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

【讨论】:

    【解决方案3】:

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

    • 框架(索引)
    • 框架(框架名称 [或] 框架 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')]
    

    【讨论】:

      猜你喜欢
      • 2015-10-18
      • 2012-04-15
      • 2022-12-10
      • 1970-01-01
      • 1970-01-01
      • 2020-05-29
      • 2015-11-20
      • 2017-02-02
      • 1970-01-01
      相关资源
      最近更新 更多