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

Accessing elements inside iFrame documents in Selenium WebDriver

我正在尝试使我需要访问 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.By 使用 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. 在 Firefox 浏览器中 - 当我使用过滤器 'frame' 检查时,在 'Firefinder' 中未检测到隐藏框架,该过滤器正在检测除隐藏框架之外的所有框架。 'Firepath'也是如此 2、在Chrome浏览器中-虽然显示了主框架内的文档,但遍历内部并没有显示隐藏的iframe。

解法: 在 Firefox 浏览器中,使用 HTML 选项卡检查元素帮助我识别主框架内的隐藏框架。 仔细遍历 iframe 隐藏文件帮助了我。 但是,我仍然不确定为什么 Chrome 浏览器 'Inspect' 不显示此框架。