我正在尝试访问电子邮件的文本正文,但这是在iframe内部。我试图访问,但它说org.openqa.selenium.NoSuchFrameException: no such frame
。
这是我尝试过的:
driver.get("http://mailinator.com/inbox.jsp?to=iframetesting007");
driver.findElement(By.partialLinkText("Testing")).click();
List<WebElement> AlliFrameID = driver
.findElements(By.tagName("iframe"));
System.out.println("Size " + AlliFrameID.size());
try {
driver.switchTo().frame(2);
} catch (Exception e) {
System.out.println(e);
System.out.println(e.toString());
}
driver.findElement(By.partialLinkText("Test Passed")).click();
HTML:
<iframe src="rendermail.jsp?msgid=1397822858-103157770-iframetesting007&time=1397822875545" frameborder="0" width="888" height="1200" hspace="0" vspace="0" marginheight="0" marginwidth="0"></ifram></iframe>
答案 0 :(得分:0)
您正在尝试使用Selenium检查电子邮件 - 这不是一个好主意。最好使用本机java库(例如javax.mail)并通过POP3或其他协议获取电子邮件。它的速度更快,更可靠。
现在回答你的问题 - 你应该写:
driver.switchTo().frame(1);
你得到了错误的索引(它应该是1而不是2)。或者你可以这样做:
WebElement iframe = driver.findElement(By.xpath("//iframe[starts-with(@src, 'rendermail')]"));
driver.switchTo().frame(iframe);
我假设src(rendermail)的开头实际上是常量,所以你可以专注于这个常量部分而忽略剩余的动态部分。
第二种方法通常更好。它更具可读性(您可以看到正在访问哪个帧)并保护您出于任何原因可以重新排序元素的情况。