2013-03-17 68 views
3

我需要從表「td」得到結果。但在我能做到這一點之前,我需要瀏覽一個包含它的框架。該框架是屬於mainFrame的框架集元素之一。我試圖使用所有類型的導航「子」子非其中的工作原理:如何使用Selenium WebDriver導航框架集內的子幀?

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">&nbsp;All Results</span> (294)</td> 
</form> 

.................... 

我需要之前導航框架我可以瀏覽子幀?我閱讀文檔。所有的互聯網例子都給出了一個簡單的示例代碼:driver.switchTo().frame(「mainFrame.0.child」)。在這種情況下它不起作用。請看看上面的腳本。

回答

5

我同意,你不能直接切換到子框架。此外,每次您要切換幀時,請務必切換到defaultContentdriver.switchTo.defaultContent)。關於你的例子,driver.switchTo().frame("mainFrame.0.child") ---這也可以工作,但你需要擺脫不必要的引號。

+1

謝謝!在切換到新框架之前切換回默認內容是關鍵。對於任何使用python的人來說,相應的方法是:'driver.switch_to_default_content()' – 2013-06-19 05:49:16

+0

@CHEBURASHKA,鏈接不工作。你可以請更新嗎? – 2016-01-12 10:53:30

6

查找從零開始主框架的索引,然後使用

driver.switchTo.frame(mainFrameindex); 

然後找到子幀的索引在主框架

driver.switchTo.frame(subFrameIndex); 

您不能直接切換到子框架沒有第一切換到父框架。這是它的工作原理。

0

您可以使用xPath直接切換到您想要的幀。通過開發者控制檯 獲得了XPath,那麼:

driver.switch_to.frame(driver.find_element_by_xpath('html/frameset/frameset/frame[1]'))