当iframe具有动态src时,如何通过WebDriver访问iframe

时间:2014-04-18 12:07:02

标签: java iframe webdriver

我正在尝试访问电子邮件的文本正文,但这是在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&amp;time=1397822875545" frameborder="0" width="888" height="1200" hspace="0" vspace="0" marginheight="0" marginwidth="0">&lt;/ifram&gt;</iframe>

1 个答案:

答案 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)的开头实际上是常量,所以你可以专注于这个常量部分而忽略剩余的动态部分。

第二种方法通常更好。它更具可读性(您可以看到正在访问哪个帧)并保护您出于任何原因可以重新排序元素的情况。