当框架没有id和title时,如何识别并切换到selenium webdriver中的框架?

时间:2015-09-15 08:50:20

标签: java selenium

任何人都可以告诉我如何识别并切换到没有标题和ID的iframe。 iframe的一部分(我有两个具有相同属性的iframe):

<iframe style="width: 1335px; height: 223px;" src="javascript:true;" frameborder="0">
<html>
#document
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
</head>
</html>
</html>
</iframe>

如何使用Java在Selenium WebDriver中解决此问题? 将不胜感激任何帮助。

4 个答案:

答案 0 :(得分:2)

您可以尝试以下解决方案。

如果有必要,请在从iframe访问网络元素之前尝试切换到默认内容。因此,在代码之前包含以下代码以检测iframe。

driver.switchTo().defaultContent();

WebDriverWait wait = new WebDriverWait(driver,20);
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.tagName("iframe")));

答案 1 :(得分:1)

如果DOM中只有一个iframe元素,那么使用标记是有意义的。

driver.findElement(By.tagName("iframe"));

或者你甚至可以直接切换到它 -

driver.switchTo().frame(0);

如果有多个iframe但属性不同,那么您可以使用属性来获取元素。

driver.findElement(By.xpath("//iframe[@frameborder='0']"));

driver.findElement(By.xpath("//iframe[@src='javascript:true;']"));

driver.findElement(By.cssSelector("iframe[style='width: 1335px; height: 223px;']"));

如果有多个iframe具有相同的属性,那么使用其他元素来定位iframe会起作用。 Here's an example using xpath。稍后,一旦找到元素,就可以switchTo()它。希望这会有所帮助。

答案 2 :(得分:0)

如果只有一个或者它是第一个iframe,你可以这样做:

driver.switchTo().frame(0);

答案 3 :(得分:-1)

这可能是最愚蠢的做法,我不知道你的目标是什么。

如果它是一个框架,你可以右键单击该字段,你会看到选项&#34;在选项卡中打开框架&#34;。

然后使用&#34; driver.get(http://blah blah ..)获取框架的URL并将其放入Python脚本中。

然后Selenium可以找到你的命名元素。

我正在使用Linux,它为我提供了右键单击选项,可以在另一个选项卡中单独打开框架。我没有使用Windows,所以不知道你是否会在右键菜单中获得该选项。

甘兹