Selenium 等到电子邮件发送完毕
Selenium wait until email is sent
我正在编写一个简单的程序来测试 gmail 的功能,其中包括发送电子邮件。
我让程序发送一封电子邮件,一旦确认已发送,它就会注销。
我不想注销当消息正在发送时,只有当它完成时。
因此,如果您有 Gmail,当您发送邮件时,您会在收件箱上方看到一个小通知,上面写着 "Your message has been sent. View message."
对应的 cssSelector 是 div.vh。
所以我希望我的程序等到 window 弹出,然后再注销。
但有时由于网速原因,它会在消息出现之前注销。
这是我的代码:
WebElement element = (new WebDriverWait(driver,10)).until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("div.vh")));
点击发送按钮后,尝试等待加载文本消失。
//Click send
driver.findElement(By.xpath("//div[text()='Send']")).click();
//wait for element to disappear
waitForElementToDisappear(By.xpath("//div[contains(text(),'Loading')]"));
or
//wait for element to appear
waitForElementToAppear(By.id("link_undo"));
void waitForElementToDisappear(By locator)
{
int i=0;
while(isElementPresent(locator))
{
Thread.sleep(100);
i++;
if(i>50)
{
break;
}
}
}
void waitForElementToAppear(By locator)
{
int i=0;
while(!isElementPresent(locator))
{
Thread.sleep(100);
i++;
if(i>50)
{
break;
}
}
}
您可以在下面找到 isElementPresent 方法的实现 link。
isElementPresent is very slow in case if element does not exist.
相反,您可以尝试类似的方法:
WebElement element = null;
WebDriverWait wait = new WebDriverWait(driver,10);
int counter = 0; //optional, just to cut off infinite waiting
while( element == null && counter != 10 ){
try{
element = wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("div.vh")));
} catch(TimeoutException te) {
log.info("Not loaded yet, continuing");
counter++;
}
}
// logout now.
我正在编写一个简单的程序来测试 gmail 的功能,其中包括发送电子邮件。
我让程序发送一封电子邮件,一旦确认已发送,它就会注销。
我不想注销当消息正在发送时,只有当它完成时。
因此,如果您有 Gmail,当您发送邮件时,您会在收件箱上方看到一个小通知,上面写着 "Your message has been sent. View message."
对应的 cssSelector 是 div.vh。
所以我希望我的程序等到 window 弹出,然后再注销。
但有时由于网速原因,它会在消息出现之前注销。
这是我的代码:
WebElement element = (new WebDriverWait(driver,10)).until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("div.vh")));
点击发送按钮后,尝试等待加载文本消失。
//Click send
driver.findElement(By.xpath("//div[text()='Send']")).click();
//wait for element to disappear
waitForElementToDisappear(By.xpath("//div[contains(text(),'Loading')]"));
or
//wait for element to appear
waitForElementToAppear(By.id("link_undo"));
void waitForElementToDisappear(By locator)
{
int i=0;
while(isElementPresent(locator))
{
Thread.sleep(100);
i++;
if(i>50)
{
break;
}
}
}
void waitForElementToAppear(By locator)
{
int i=0;
while(!isElementPresent(locator))
{
Thread.sleep(100);
i++;
if(i>50)
{
break;
}
}
}
您可以在下面找到 isElementPresent 方法的实现 link。
isElementPresent is very slow in case if element does not exist.
相反,您可以尝试类似的方法:
WebElement element = null;
WebDriverWait wait = new WebDriverWait(driver,10);
int counter = 0; //optional, just to cut off infinite waiting
while( element == null && counter != 10 ){
try{
element = wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("div.vh")));
} catch(TimeoutException te) {
log.info("Not loaded yet, continuing");
counter++;
}
}
// logout now.