我需要从“td”表中获取结果。但在我能做到之前,我需要导航一个包含它的框架。该框架是属于mainFrame的框架集元素之一。我尝试使用所有类型的导航“子”子帧,其中有效:
driver.switchTo().defaultContent();
Thread.sleep(1000);
driver.switchTo().frame("mainFrame.0.fr_resultsNav~ResultsMaxGroupTemplate0.9766101221774707");
driver.switchTo().frame("main.Frame.1.fr_resultsNav~ResultsMaxGroupTemplate0.8811790466176727");
// even: driver.switchTo().frame("mainFrame.0.fs_main");
以下是网页的简要布局:
<frame src="banner.asp" name="topFrame" scrolling="no" noresize="noresize" id="topFrame" title="topFrame">
<frame src="" name="mainFrame" id="mainFrame" title="mainFrame" wd_frame_id_="5f4c10bc7e0960070bfda831655b8b0c">
<frameset id="fs_main" border="0" frameborder="no" framespacing="0" rows="70,87,*">
.....................
<frameset id="fs_content" cols="23%,*" framespacing="0" frameborder="no">
.....................
<frameset cols="*,9" id="LeftFrameSet" framespacing="0" frameborder="no">
.....................
<frame frameborder="0" name="fr_classification~ResultsMaxGroupTemplate0.609021034867735" title="Results Classification Frame" id="fr_classification~ResultsMaxGroupTemplate0.609021034867735" src="/lnacui2api/results/shared/waitMessage.do?wmibIdRand=61_T16938265013_rand_1363544453847" scrolling="Auto" onload="paintResultsBorder('ResultsMaxGroupTemplate0.609021034867735');">
....................
<form name="results_listview_ResultsListForm" method="post" action="/lnacui2api/results/listview/listview.do" id="results_listview_ResultsListForm">
..........
<td nowrap="" height="20"> <span id="new"> All Results</span> (294)</td>
</form>
....................
在导航子帧之前,是否需要导航框架集?我看了文档。所有互联网示例都提供了一个简单的示例代码:driver.switchTo()。frame(“mainFrame.0.child”)。在这种情况下它不起作用。请看一下上面的脚本。
答案 0 :(得分:7)
从零开始查找主框架的索引,然后使用
driver.switchTo.frame(mainFrameindex);
然后在主框架中找到子框架的索引
driver.switchTo.frame(subFrameIndex);
如果没有先切换到父框架,则无法直接切换到子框架。这是它的工作原理。
答案 1 :(得分:7)
我同意,你不能直接切换到子框架。此外,每次要切换帧时,请务必切换到defaultContent
(driver.switchTo.defaultContent
)。关于你的例子,driver.switchTo().frame("mainFrame.0.child")
---这也可以,但你需要摆脱不必要的引号。
答案 2 :(得分:1)
您可以使用xPath直接切换到所需的帧。 通过Developer控制台获取Xpath,然后:
driver.switch_to.frame(driver.find_element_by_xpath('html / frameset / frameset / frame[1]'))
答案 3 :(得分:1)
通过链接方法在一起,switchTo().defaultContent
之后,您可以通过tagName通过findElements()创建可用帧的临时列表,然后转到该特定帧的索引...
例如
driver.switchTo()defaultContent();
driver.switchTo().frame(driver.findElement(By.tagName("frameset")).findElements(By.tagName("frame")).get(2));