问题
I need to get the result from the table \"td\". But before I can do that I need to navigate a frame that contains it. The frame is one of the frameset elements that belongs to the mainFrame. I tried to use all types of navigating the \"child\" subframe non of which works:
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\");
The following is the brief layout of the webpage:
<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>
....................
Do I need to navigate the frameset before I can navigate a subframe? I read the documentation. All internet examples give a simple sample code: driver.switchTo().frame(\"mainFrame.0.child\"). It does not work in this case. Please, take a look at the above script.
回答1:
I agree, you cannot directly switch to a child frame. Also, make sure to switch to the defaultContent
(driver.switchTo.defaultContent
) every time you want to switch frame. With regard to your example, driver.switchTo().frame("mainFrame.0.child")
--- this could also work, but you need to get rid of unnecessary quotation marks.
回答2:
Find the index of main frame starting from zero then use
driver.switchTo.frame(mainFrameindex);
Then find the index of sub frame in the main frame
driver.switchTo.frame(subFrameIndex);
You cannot directly switch to a child frame without first switching to the parent frame. This is how it works.
回答3:
Through chaining methods together, once you switchTo().defaultContent
, you can create temporary lists of available frames through findElements() by tagName and go to that specific frames' index...
For example
driver.switchTo()defaultContent();
driver.switchTo().frame(driver.findElement(By.tagName("frameset")).findElements(By.tagName("frame")).get(2));
回答4:
You can switch directly to the frame you want with the xPath. Get the Xpath through the Developer console, then:
driver.switch_to.frame(driver.find_element_by_xpath('html / frameset / frameset / frame[1]'))
来源:https://stackoverflow.com/questions/15464808/how-to-navigate-a-subframe-inside-a-frameset-using-selenium-webdriver