步骤查找元素

时间:2015-11-02 09:59:57

标签: java selenium

我有selenium java代码测试ff 41和selenium 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();

2 个答案:

答案 0 :(得分:0)

如果我做对了,你会调用findElements 30次,如果你还没找到你的元素,你会在每次迭代后暂停1次。所以你需要最坏情况30s只用于暂停,加上整个循环的时间,尤其是findElements。因此,您记录的时间超过30秒,因为您记录了整个代码块的执行情况。我不知道我是否做得对,这可能对你有帮助。

答案 1 :(得分: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秒后发生超时。