在Selenium WebDriver中访问iFrame文档中的元素

时间:2017-07-23 19:43:08

标签: iframe shadow-dom

我正在尝试自动化一个场景,我需要访问iFrame中的元素并继续我的测试。 我目前的问题是,我能够成功切换到iframe,但我无法访问框架内的内容。 iframe中的内容是Shadow DOM内容,位于文档中。

HTML代码如下所示::(请参阅附件HTML

我已经尝试了下面的内容并获得了 org.openqa.selenium.NoSuchElementException:没有这样的元素:无法找到元素

  1. 访问影子根

    driver.switchTo().frame("iframe_id");    
    WebElement root1 = driver.findElement(By.className("class_abs"));          
    WebElement shadowRoot1 = expandRootElement(root1);   
    

    此处webdriver无法按类名查找元素。

  2. 2.使用Javascript执行器

    driver.switchTo().frame("iframe_id");        
    JavascriptExecutor js=(JavascriptExecutor) driver;        
    js.executeScript("arguments[0].click();",  driver.findElement(By.xpath("button_xpath")));
    

    这里webdriver无法访问Xpath。

    3。 切换到IFrame后使用普通Xpath。

    我想知道我是否需要首先访问iFrame中的文档内容才能访问其元素。如果是这种情况,我该怎么办呢。

    P.S-在Chrome和Firefox浏览器上试过这个。

1 个答案:

答案 0 :(得分:1)

所有

我终于设法解决了这个问题。 所以问题的解决方案是这样的。

- 页面上设计的框架实际上是隐藏的。 - 切换到主框架后,我不得不切换到隐藏框架。 - 然后很容易识别出这些元素。

我遇到的问题: 1.在Firefox浏览器中 - 当我检查过滤器'frame'时,在'Firefinder'中未检测到隐藏帧,该过滤器'frame'正在检测除隐藏帧之外的所有帧。 “Firepath”的情况也是如此 2.在Chrome浏览器中 - 虽然显示了主框架内的文档,但在内部遍历并未显示隐藏的iframe。

<强>解决方案: 在Firefox浏览器中,使用HTML选项卡检查元素有助于我识别主框架内的隐藏框架。 仔细遍历iframe隐藏文档对我有所帮助。 但是,我仍然不确定为什么Chrome浏览器“Inspect”不显示此框架。

相关问题