发现没有Frame的Selenium Webdriver问题

时间:2013-03-11 05:41:04

标签: iframe selenium frame selenium-webdriver

有人可以帮我弄清楚如何在选择登录后让Selenium Webdriver找到框架吗?

https://www.guaranteedrate.com/agent/visitors 点按登录 将密码发送到用户名

@Test

public void fail() throws InterruptedException {


        driver.findElement(By.linkText("Sign In")).click();
            driver.switchTo().window("GB_window");
            driver.switchTo().frame(0);                driver.findElement(By.id("username")).sendKeys("testgr100@gmail.com");
}

4 个答案:

答案 0 :(得分:0)

我认为点击“登录”后,您将进入一个框架,即注册表单。

您要做的是先切换到一个窗口(GB_Window)。

尝试删除切换到窗口调用,然后切换到框架并尝试操作

编辑代码后,请使用此

    driver.findElement(By.linkText("Sign In")).click();
    driver.switchTo().frame(0);
    driver.findElement(By.id("username")).sendKeys("testgr100@gmail.com");

}

答案 1 :(得分:0)

尝试以下代码。它对我有用。在找到用户名元素之前有两个框架。第一帧是GB_frame,第二帧没有html源中给出的任何名称。所以我使用了索引(frame(0))作为第二个。

@Test

public void fail() throws InterruptedException {    

        driver.findElement(By.linkText("Sign In")).click();
        //switch to frames inside the webpage
        driver.switchTo().frame("GB_frame"); //1st frame
           driver.switchTo().frame(0); //2nd frame              
              driver.findElement(By.id("username")).sendKeys("testgr100@gmail.com");
}

答案 2 :(得分:0)

你可以尝试一下,告诉我它是否有效吗?我怀疑你所遇到的只是Firefox的奇怪之处,JavaScriptExecutor会绕过它。

public void setEmailAddrOnFieldInSubFrame() {
    driver.findElement( By.linkText("Sign In") ).click();
    driver.switchTo().window("GB_window");
    driver.switchTo().frame(0);
    WebElement element = driver.findElement( By.id("username") );
    JavascriptExecutor executor = (JavascriptExecutor)driver;
    executor.executeScript( "arguments[0].value='testgr100@gmail.com';", element );

    //cleanup frame position by switching back to previous window
    driver.switchTo().defaultContent(); // always do this cleanup just in case
}

答案 3 :(得分:0)

如果应用程序在firefox上运行,那么只需右键单击即可。在上下文菜单中,您将首先通过查看选项此框架来确定元素是否在框架下。确认后再检查元素。在firebug中慢慢滚动,你会发现元素存在的iframe标签。通过这种方式,您将了解名称。如果您想知道所有iframe的数量及其名称,请使用 driver.findElements(By.tag( “IFRAME”))。这将返回带有标记的webelements列表,然后您可以逐个迭代并使用getAttribute(“name”)。请注意,仅当iframe实际上具有其他名称将返回空的名称时,才会返回该名称。