【问题标题】:Can't select an Iframe in selenium webdriver无法在 selenium webdriver 中选择 iframe
【发布时间】:2014-09-08 09:37:13
【问题描述】:

我正在尝试通过类名选择Iframe,但它不起作用,我正在尝试使用tagName 它可以工作,但是当我尝试在Iframe 的元素中输入时,我不能,你能帮我吗这是我的代码:

webDriver driver.switchTo().frame( driver.findElement( By.className( "cke_wysiwyg_frame cke_reset" ) ) );
driver.findElement( By.xpath( "//body[contains(text(),'type here')]" ) ).sendKeys( "Testing" );

这是我网页中的 HTML:

<div id="cke_534_contents" class="cke_contents cke_reset" role="presentation" style="height: 75px;">
   <span id="cke_586" class="cke_voice_label">Press ALT 0 for help</span>
   <iframe class="cke_wysiwyg_frame cke_reset" frameborder="0" src="" style="width: 100%; height: 100%;" aria-describedby="cke_586" tabindex="0" allowtransparency="true">
      <!DOCTYPE html>
      <html lang="en-gb" dir="ltr">
         <head>
         <body class="cke_editable cke_editable_themed cke_contents_ltr cke_show_borders" contenteditable="true" spellcheck="true">
            type here
         </body>
      </html>
   </iframe>
</div>

【问题讨论】:

  • 我不经常使用className 来查找元素,但我很确定它不能在参数中包含任何空白=空格。您是否尝试改用cssSlectordriver.findElement(By.CssSelector("cke_wysiwyg_frame.cke_reset"));

标签: java iframe selenium selenium-webdriver


【解决方案1】:

通过 xpath 找到 iFrame 解决了问题

driver.switchTo().defaultContent();
driver.switchTo().frame( driver.findElement( By.xpath( iframeXpath ) ) );

然后返回顶部窗口:

 driver.switchTo().defaultContent();

【讨论】:

    【解决方案2】:

    您不能使用类选择 iFrame。使用以下方法检查 webdriver 文档:-

    https://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/WebDriver.TargetLocator.html

    1. 您可以通过“名称”/“id”属性切换到 iFrame。

      driver.switchTo().frame("frame1");
      
    2. 可以按帧索引切换。

      driver.switchTo().frame(driver.findElements(By.tagName("iframe").get(0));
      

    现在您必须检查整个页面有多少 iFrame 存在?如果它说:3,请始终使用第 3 个 iFrame。

    driver.switchTo().frame(driver.findElements(By.tagName("iframe").get(3));
    

    希望对你有帮助。

    【讨论】:

    • 嗨,M,当我输入上面的行时,我没有得到 get();方法 "tagName("iframe").get(3));"
    • 你需要一个额外的缺失括号:driver.switchTo().frame(driver.findElements(By.tagName("iframe")).get(0));
    【解决方案3】:

    是的,有一个错误..好吧,你可以做一件事..手动计算页面中有多少 iframe,如果你想切换它的第三个。

    如doc所说,直接指定int值,

    driver.switchTo().frame(index)
    

    所以你的代码可以变成这样:-

    driver.switchTo().frame(3);
    

    别忘了恢复默认内容。

    driver.switchTo().defaultContent();
    

    请让我知道这是否有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-10
      • 1970-01-01
      • 2017-05-30
      • 2012-08-05
      • 1970-01-01
      • 2023-03-13
      • 2015-05-19
      • 1970-01-01
      相关资源
      最近更新 更多