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

How to make the Selenium wait until the next page loads up?

Wait for page load in Selenium

我是编码和自动化测试的新手。我在编码方面只知道 if-elsewhiledo whilefor 等。诸如此类的小事。以上是 link ,我试图结帐以使 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();
    } 
}

这是一个known bug in geckodriver. To get around it for now, use explicit waits

我没有 Gmail 帐户,所以无法测试,但这应该可以。我不会想到您需要等待初始页面加载,但也许您需要等待。我在开始时添加了一个等待并删除了很多不必要的代码。您找到每个元素两次。此外,如果您不需要该元素用于多个用途(单击、发送键等),则无需将其存储在变量中。只需在单衬里使用它。另外,请将您的 driver 称为 driver... 没人知道 d 是什么。你想命名你的变量,以便清楚它们包含什么。节省一些使事情变得不那么清晰的击键并不能节省时间,使用现代 IDE,您可以使用 intellisense-like 功能通过按键自动完成 driver 名称。

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();