如何让Selenium等到下一页加载?

时间:2016-12-14 12:14:25

标签: selenium selenium-webdriver browser-automation

Wait for page load in Selenium

我是编码和自动化测试的新手。我在编码中知道的只有if-elsewhiledo whilefor等等。以上是我试图结账以使Selenium等待一段时间的链接,但无法实现。 以下是我为了登录我的Gmail帐户而编写的以下代码但是没有工作。任何人都可以更正代码吗? 我想我需要延迟selenium的操作并让页面首先加载。

public class loginGmail {

    public static void main(String[] args) 
    {
        System.setProperty("webdriver.gecko.driver", "E:\\eclipse\\Drivers\\geckodriver.exe");
        FirefoxDriver d = new FirefoxDriver();
        d.get("https://www.gmail.com");
        d.findElement(By.id("Email"));
        WebElement email = d.findElement(By.id("Email"));
        email.sendKeys("tusharanandnet@gmail.com");

        d.findElement(By.name("signIn"));
        WebElement next = d.findElement(By.name("signIn"));
        next.click();



        d.findElement(By.id("Passwd"));
        WebElement pass = d.findElement(By.id("Passwd"));
        pass.sendKeys("********");

        d.findElement(By.id("signIn"));
        WebElement signIn = d.findElement(By.id("signIn"));
        signIn.click();
    } 
}

2 个答案:

答案 0 :(得分:0)

这是known bug in geckodriver。要暂时解决此问题,请使用explicit waits

答案 1 :(得分:0)

我没有Gmail帐户,所以我无法对此进行测试,但这应该可行。我不会想到你需要等待初始页面加载,但也许你会这样做。我在开始时添加了一个等待并删除了许多不必要的代码。你发现每个元素两次。此外,如果您不需要多个元素(click,sendKeys等),那么就不需要将它存储在变量中。只需在一个衬里使用它。另外,请致电您的司机driver ......没有人知道d是什么。您希望为变量命名,以便清楚它们包含的内容。保存一些不太清楚的按键不会节省时间,并且使用现代IDE,您可以使用类似intellisense的功能通过按键自动完成驱动程序名称。

new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(By.id("Email")))
        .sendKeys("tusharanandnet@gmail.com");
// driver.findElement(By.name("signIn")).click(); // don't think this is needed?
driver.findElement(By.id("Passwd")).sendKeys("********");
driver.findElement(By.id("signIn")).click();