2015-06-12 78 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.