2015-11-02 51 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秒后发生超时。