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.