如何让 Selenium 等到下一页加载完毕?
How to make the Selenium wait until the next page loads up?
Wait for page load in Selenium
我是编码和自动化测试的新手。我在编码方面只知道 if-else
、while
、do while
和 for
等。诸如此类的小事。以上是 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();
Wait for page load in Selenium
我是编码和自动化测试的新手。我在编码方面只知道 if-else
、while
、do while
和 for
等。诸如此类的小事。以上是 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();