2015-11-02 96 views
1

我有硒代碼java測試ff 41和硒2.48。我的代碼的最後一步是findElement(超時30秒)。我沒有任何錯誤,我的測試也沒有失敗。但是我在這一步看到過載,其持續時間爲88 - 150秒。 任何想法爲什麼我的測試在30秒後不會失敗? 這是我的最後一步代碼重載在步驟查找元素

errorMessage = ""; 
boolean flag23 = false; 
for (int k = 0; k < 30; k++) 
{ 
    try 
    { 
     List<WebElement> element23 = findElements("print-confirmation");// "//a[@class='print-confirmation']"); 
     if (element23.size() != 0) 
     { 
      flag23 = true; 
      break; 
     } 
    } 
    catch (Exception e) 
    { 
     pause(1000); 
    } 
} 
assertTrue(flag23); // new WebDriverWait(driver, 
        // 30).until(ExpectedConditions.presenceOfElementLocated(By.id("//a[@class='print-confirmation']"))); 
writer.append("\ntest89028:23 OK " + getRunTime(System.currentTimeMillis() - startTime)); 
startTime = System.currentTimeMillis(); 

回答

0

如果我得到它的權利,你叫findElements 30次,暫停在每次迭代後1秒,如果你沒有找到你的元素呢。所以你只需要30秒的最壞情況暫停,加上整個循環的時間,尤其是findElements。所以你的記錄時間超過了30秒,因爲你記錄了整個代碼塊的執行情況。我不知道我是否正確,這可能會對你有所幫助。

+0

這很有趣,但是你會不會增加這段代碼的執行時間2次甚至4次? – Arno

+0

好吧,它似乎有點太多,你是對的......但我不知道你的'findElements'方法的複雜性。每次迭代都會返回一個WebElements列表,根據您的方法,創建並返回該列表可能需要一段時間。但這只是一個猜測,希望你能弄明白。 –

0

我不確定findElements()函數中有什麼......可能是等待或睡眠?那裏有東西可能會放大等待時間,或者你有一套implicitWait()套。我會重寫這樣的代碼塊......(並刪除任何implicitWait())。

boolean flag23 = false; 
try 
{ 
    new WebDriverWait(driver, 30).until(ExpectedConditions.presenceOfElementLocated(By.xpath("//a[@class='print-confirmation']"))); 
    flag23 = true; 
} 
catch (TimeoutException e) 
{ 
    System.out.println("Element not found due to TimeoutException"); 
} 
assertTrue(flag23); 

我認爲它更容易閱讀,更受控制。你不應該混合隱式和顯式的等待,否則你會得到奇怪的行爲(可能與此類似)。

http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp#explicit-and-implicit-waits

警告:不要混用隱性和顯性等待。這樣做會導致無法預測的等待時間。例如,設置10秒的隱式等待和15秒的顯式等待可能會導致20秒後發生超時。