2015-06-12 73 views
0

我在写一个测试gmail功能的简单程序,这包括发送电子邮件。Selenium等到发送邮件

我有程序发送一封电子邮件,一旦确认它已发送,它就会注销。

我不想注销,而只有在完成后才会发送消息。

所以,如果你有gmail,当你发送一条消息时,你会在收件箱上方看到一条“你的消息已发送,查看消息”的小通知。

该cssSelector是div.vh.

所以我希望我的程序等到弹出窗口才能注销。

但有时会在因Internet速度而出现消息之前退出。

这里是我的代码:

WebElement element = (new WebDriverWait(driver,10)).until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("div.vh"))); 
+0

为什么不等待超过10秒? – satnam

+0

像使用Thread.sleep(10000)强制等待真的不是最佳的;只要需要,我应该等待。 – Viratan

+0

我认为@satnam的含义是你在'WebDriverWait'中使用了10秒的默认超时时间,如果发送消息需要更多的时间,那么它将在10秒后停止等待。那么为什么你不使用更长的默认超时? – RealSkeptic

回答

-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.

+0

ahh ok我seee,ty – Viratan

+0

都waitForElementToAppear和消失实现是相同的。如果元素出现,它必须等待5秒钟然后中断。 while循环中出现的方法应该伴随着! 。并且也不鼓励使用Thread.sleep。 –

+0

谢谢Vivek。是的我同意。更新了我的答案。如果您执行任何等待方法,它将包含Thread.sleep。 – Santoshsarma

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.