我正在编写一个测试gmail功能的简单程序,包括发送电子邮件。
我让程序发送一封电子邮件,一旦确认已发送,它就会退出。
我不想在发送消息时注销,只有在完成后才能注销。
因此,如果您有Gmail,并且当您发送邮件时,您会在收件箱上方看到一条通知,上面写着“您的邮件已发送。请查看邮件。”
cssSelector就是div.vh。
所以我希望我的程序在我退出之前等到该窗口弹出。
但有时由于互联网速度,它会在消息出现之前退出。
这是我的代码:
WebElement element = (new WebDriverWait(driver,10)).until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("div.vh")));
答案 0 :(得分:1)
相反,你可以尝试过类似的东西:
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.
答案 1 :(得分:-1)
单击“发送”按钮后,尝试等待,直到加载文本消失。
//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方法实现。
isElementPresent is very slow in case if element does not exist.