问题
Snapshot of Frame_top with 3 nested frames:
Code:
WebElement topframe = driver.findElement(By.xpath("//frame[@name='frame-top']"));
String frame1 = driver.switchTo().frame(topframe).switchTo().frame("frame-left").findElement(By.xpath("//body")).getText();
System.out.println(frame1);
List<WebElement> nestedFrames = driver.switchTo().frame(topframe).findElements(By.tagName("frame"));
System.out.println(nestedFrames.size());
On top you can see this page has nested frames inside the frame(frame_top).
Using line 1-3 I'm able to get the text of each nested frame. However I can't get number of frames inside the "Frame_top".(Line 4-5).
How do I get total number of frames inside the "frame_top"?
Thanks in advance
回答1:
To get total number of nested frames with in the parent <frame>
you need to:
- Induce WebDriverWait for the desired frameToBeAvailableAndSwitchToIt.
- Induce WebDriverWait for the visibilityOfAllElementsLocatedBy() of the frames.
- You can use either of the following Locator Strategies:
Using cssSelector and tagName:
new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("frame[name='frame-top']"))); System.out.println(new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.tagName("frame"))).size());
Using xpath and tagName:
new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//frame[@name='frame-top']"))); System.out.println(new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.tagName("frame"))).size());
Reference
You can find a couple of relevant discussions in:
- Ways to deal with #document under iframe
- Is it possible to switch to an element in a frame without using driver.switchTo().frame(“frameName”) in Selenium Webdriver Java?
来源:https://stackoverflow.com/questions/62719676/how-to-get-total-number-of-nested-frames-inside-the-frame