当前位置: 首页 > 面试题库 >

如何使用Java处理Selenium WebDriver中的iframe

赖翰
2023-03-14
问题内容
<div>    
  <iframe id="cq-cf-frame ">    
    <iframe id="gen367">   
      <body spellcheck="false" id="CQrte" style="height: 255px; font-size: 12px; font-family:tahoma,arial,helvetica,sans-serif; background-image: url(&quot;/libs/cq/ui/widgets/themes/default/ext/form/text-bg.gif&quot;); background-repeat: repeat-x; background-attachment: fixed;">
        <p>4t43t4<br></p>
      </body >
    </iframe>
  </iframe>    
</div>

在这种情况下有一个iframeunder
iframe。而且我必须选择外表iframe去内在,iframe并写在内在的身体上iframe

接下来,我必须从内部iframe到外部出来iframe,然后单击“确定”按钮(位于外部iframe)。

以下是我的代码

/*Line 1 */ driver.switchTo().frame("cq-cf-frame");
/*     2 */ driver.findElement(By.css("#extdd-9 > div.tblRow >  input.edititem").click();
/*     3 */ driver.switchTo().Frame("cq-gen379");
/*     4 */ driver.findElement(By.id("CQrte").sendKeys("Tnx");  
/*     5 */ selenium.selectFrame("relative=up");       
/*     6 */ driver.findElement(By.xpath("//button[text()='OK']")).click();

以下是我的问题:

我的测试代码可以正常工作到第4行,即写到正文中,但是我想从内到外显示iframe//button[text()='OK']未找到该元素。

我尝试使用索引,父母,亲戚,但没有运气。

注意: 如果我不选择内部框架(cq-gen379)。我可以单击“确定”按钮。


问题答案:

在Webdriver中,您应该使用driver.switchTo().defaultContent();摆脱框架。您需要先退出所有框架,然后再切换到外部框架。

// between step 4 and step 5
// remove selenium.selectFrame("relative=up");
driver.switchTo().defaultContent(); // you are now outside both frames
driver.switchTo().frame("cq-cf-frame");
// now continue step 6
driver.findElement(By.xpath("//button[text()='OK']")).click();


 类似资料:
  • 我正在使用C#在selenium web驱动程序中为Chrome浏览器编写一个自动化脚本。我陷入了一个场景:多个选项卡在同一浏览器中打开,我需要导航到浏览器的第一个选项卡,并需要在“身份验证”对话框中重新输入登录凭据。 授权窗口截图如下: 我无法导航到第一个选项卡,也无法传递用户名 执行上述代码后,将出现以下错误: WebDriver等待有一些无效的参数。参数2:不能从int转换为System.时

  • 问题内容: 我如何在seleniumwebdriver 3.0 beta版本中使用geckodriver。当我实例化Firefox时: 我得到错误: 线程“主”中的异常java.lang.IllegalStateException:驱动程序可执行文件的路径必须由webdriver.gecko.driver系统属性设置;否则,必须执行以下操作:有关更多信息,请参见 https://github.co

  • 是否有办法过滤掉所有大于最大值的值,这些值可以使用Stream API存储在中? 目前的情况是,你可以在前端用一个简单的搜索栏搜索一些客户的身份证。 例如:

  • 问题内容: 在开发高度基于XML的Java应用程序时,我最近在Ubuntu Linux上遇到了一个有趣的问题。 我的应用程序使用Java Plugin Framework ,似乎无法将dom4j创建的XML文档转换为Batik的 SVG规范实现。 在控制台上,我了解到发生了错误: 我认为问题是由来自JVM的原始类加载器与插件框架部署的类加载器之间的冲突引起的。 据我所知,不可能为框架指定一个类加载

  • 问题内容: 在开发一个高度基于XML的Java应用程序时,我最近在Ubuntu Linux上遇到了一个有趣的问题。 我的应用程序使用Java Plugin Framework ,似乎无法将dom4j创建的XML文档转换为Batik的 SVG规范实现。 在控制台上,我了解到发生了错误: 我认为问题是由JVM的原始类加载器与插件框架部署的类加载器之间的冲突引起的。 据我所知,不可能为框架指定一个类加载

  • 问题内容: 这是我的代码: 现在我有下一个错误: 线程“主”中的异常org.openqa.selenium.NoSuchElementException:无法找到ID == txtEnterCptCode的元素(警告:服务器未提供任何堆栈跟踪信息)命令持续时间或超时:404毫秒。 有任何想法吗? 问题答案: 看来您实际上并没有切换到任何新窗口。您应该获得原始窗口的窗口句柄,将其保存,然后获取新窗口