java - Selenium Web 驱动程序 - 无法使用动态 iframe id 切换到 iframe

标签 java selenium-webdriver jxl

我正在尝试使用动态 iframe id 切换到 iframe。但是,错误如下。任何帮助将不胜感激。

org.openqa.selenium.NoSuchFrameException: No frame element found by name or id iframe-8c590576-9047-4baf-a34f-69fe67a295a1

以下是我要切换的第一个 iframe 中的 HTML:

<iframe allowtransparency="true" class="iframe-4be2b789-7f13-4350-9771-0523258c080e contentPanelFrame" data-content-url="en_US/Person_homePagePDCPage.do?o3ctx=4096&amp;concernRoleID=-8841741561699565568&amp;evidenceType=null" data-dojo-attach-point="frame" frameborder="0" id="iframe-4be2b789-7f13-4350-9771-0523258c080e" iscpiframe="true" marginheight="0" marginwidth="0" title="Content Panel - Home" src="en_US/Person_homePagePDCPage.do?o3ctx=4096&amp;concernRoleID=-8841741561699565568&amp;evidenceType=null">&nbsp;</iframe>




<iframe allowtransparency="true" class="iframe-8e82cd97-893d-41ec-b2e5-c6151d6a34a6 contentPanelFrame" data-content-url="en_US/SCSysMAAdminHomePagePage.do?o3ctx=4096" data-dojo-attach-point="frame" frameborder="0" id="iframe-8e82cd97-893d-41ec-b2e5-c6151d6a34a6" iscpiframe="true" marginheight="0" marginwidth="0" title="Content Panel - Home" src="en_US/SCSysMAAdminHomePagePage.do?o3ctx=4096" cd_frame_id_="146a47c04d9f04d598ccfa3f99c1674d">&nbsp;</iframe>



<iframe allowtransparency="true" class="iframe-f41ba74a-5362-41f5-977f-e144c8c7e4e2 contentPanelFrame" data-content-url="en_US/Person_search1Page.do?o3ctx=4096" data-dojo-attach-point="frame" frameborder="0" id="iframe-f41ba74a-5362-41f5-977f-e144c8c7e4e2" iscpiframe="true" marginheight="0" marginwidth="0" title="Content Panel - Home" src="en_US/Person_search1Page.do?o3ctx=4096">&nbsp;</iframe>



<iframe allowtransparency="true" border="0" class="detailsPanelFrame iframe-ef98a903-a64e-4b67-bba1-46a86eb2569c" data-content-url="en_US/Person_homeTabDetailsPage.do?concernRoleID=-8841741561699565568&amp;o3ctx=36864" frameborder="0" height="99%" page-id="Person_homeTabDetails" scrolling="no" width="99%" src="en_US/Person_homeTabDetailsPage.do?concernRoleID=-8841741561699565568&amp;o3ctx=36864" title="Context Panel - Sharone Stone"> </iframe>



<iframe _srccontents="en_US/Participant_resolveParticipantSmartPanelPage.do?concernRoleID=-8841741561699565568&amp;o3ctx=266240" allowtransparency="true" border="0" class="smartPanelFrame iframe-f9201550-6ac4-4916-9262-988c17c9a24d" frameborder="0" height="99%" id="curam_tab_SmartPanelIframe" iframeloaded="false" name="curam_tab_SmartPanelIframe" page-id="Participant_resolveParticipantSmartPanel" scrolling="no" src="" title="Smart Panel" width="99%"> </iframe>



<iframe allowtransparency="true" class="iframe-7c91f6ef-a3d3-460e-83b5-d405503921e3 contentPanelFrame" data-content-url="en_US/Activity_redirectCurrentUserCalendarPage.do?o3ctx=4096&amp;startDate=null&amp;calendarViewType=null" data-dojo-attach-point="frame" frameborder="0" id="iframe-7c91f6ef-a3d3-460e-83b5-d405503921e3" iscpiframe="true" marginheight="0" marginwidth="0" title="Content Panel - Home" src="en_US/Activity_redirectCurrentUserCalendarPage.do?o3ctx=4096&amp;startDate=null&amp;calendarViewType=null">&nbsp;</iframe>



<iframe id="ie-progress-indicator-helper" name="null" src="about:blank" onload="null" style="position: absolute; left: 1px; top: 1px; height: 1px; width: 1px; visibility: hidden" title="ie-progress-indicator-helper"></iframe>



<iframe id="ie-progress-indicator-helper" name="null" src="about:blank" onload="null" style="position: absolute; left: 1px; top: 1px; height: 1px; width: 1px; visibility: hidden" title="ie-progress-indicator-helper"></iframe>



<iframe id="ie-progress-indicator-helper" name="null" src="about:blank" onload="null" style="position: absolute; left: 1px; top: 1px; height: 1px; width: 1px; visibility: hidden" title="ie-progress-indicator-helper"></iframe>

以下是我的代码:

driver.switchTo().frame("iframe-8c590576-9047-4baf-a34f-69fe67a295a1");
            Thread.sleep(2000);

我尝试使用 xpath 如下,但没有成功:

driver.findElement(By.xpath("//html/body/div[1]/div[4]/div[3]/div[2]/div[3]/div[3]/div[2]/div/div[4]/div/div/div[1]/div/div[3]/div/div[2]/iframe/html/body/div[2]/div[6]/div/table/tbody/tr/td[1]/div/div/table/tbody/tr/td[1]/[contains(@class, 'field-link') and contains(@class ,'external-link')]")).click();
            Thread.sleep(2000);

最佳答案

您可以使用部分 id 或 class 将 iframe 定位为 Web 元素,并使用它进行切换。

看起来 src 属性是唯一的。您可以使用它来定位框架。

WebElement iframe = driver.findElement(By.cssSelector("[src*='en_US/Person_homePagePDCPag']"));
driver.switchTo().frame(iframe);

关于java - Selenium Web 驱动程序 - 无法使用动态 iframe id 切换到 iframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38997407/

相关文章:

java - 使用 jxl 修改现有的 excel

java - 如何读取 Stringbuffer 中具有 html 表之类数据的 Read .xls 文件?

java - 创建 twitterstream 时出现 401 错误

java - RemoteWebDriver 抛出 "org.openqa.selenium.SessionNotCreatedException: Unable to create new remote session"

java - TestNG 未运行并行方法

excel - 使用 POI jar 获取 Excel SheetNames

java - 单击按钮时修改变量/其他 Swing 对象

java - Netty服务器中未调用RequestHandler

java - 从 JTable 添加/删除行后如何添加和减去总和值

python - 如何通过xpath提取html dom内文本节点的文本?