使用 Robot Framework 减慢测试运行速度的好方法?

问题描述 投票:0回答:4

所以我对机器人框架相当陌生,并且已经多次遇到过各种形式的这个问题。本质上,我创建了一套测试,最终通过并检查我期望的东西,然后它们通过 CI/CD 管道,在专用测试运行器上我遇到了一些失败。从本质上讲,这似乎是因为测试运行者做得更快一点,无论是由于硬件还是硒速度,这并不重要。

为了避免这些失败,我最终在测试中添加了一些内容,以在某些点“放慢”它们的速度,以确保成功,基本上是让它们膨胀,或者只是多一点保护。那么对于有更多经验的人来说,遇到这种情况该如何处理呢?我想尽可能坚持最佳实践,即我不仅在各处使用睡眠,而且使用隐式等待,但我仍然不知道最好的方法是什么。

这是我最近遇到的问题的片段:

Wait Until Page Contains Element ${STATIC_TABLE_XPATH}/somepath 10
${image_text} = Selenium2Library.Get Element Attribute ${STATIC_TABLE_XPATH}/somepath
${second_paragraph_text} = Selenium2Library.Get Text ${STATIC_TABLE_XPATH}/somepath

所以基本上,尽管这些功能在功能上是正确的,但它们有时在测试运行器上运行时不会返回任何内容。我认为这是因为事情发生得太快,所以我添加了一个等待页面包含元素,不幸的是同样的问题仍然存在。有没有最好的方法来处理这种情况,让它持续过去?

我认为添加等待关键字在预期变量值上成功会非常可怕,但很高兴被证明是错误的!

python selenium robotframework
4个回答
2
投票

drkthng 的推理是正确的,但您不需要编写所有代码......它已经存在于

ExpectedConditions
中。一个简单的例子

WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.presenceOfElementLocated(locator));

查看所有可用方法(有很多)的文档以及如何使用它们。


1
投票

尽管你觉得这很糟糕,但我认为减慢 Selenium 速度的最好方法是不断轮询元素属性,直到获得合适的变量。尝试某件事直到成功并没有什么坏处。如果你有一个bug,属性值永远不会好。我相信 Wait Until Keyword Succeeds 关键字就是为了这种情况而创建的。我一直用它。


0
投票

尽可能避免睡觉。

隐式等待也不是可扩展的解决方案。例如,如果您要检查元素“不存在”,它们可能会阻碍您很大的时间。

我建议你充分利用WebDriverWaits。

我经常需要等待某些元素或页面显示,所以我写了一些这样的方法:

public void waitUntilDisplayed(By elementLocator, int timeoutInSeconds) {
    WebDriverWait wait = (WebDriverWait)new WebDriverWait(driver, timeoutInSeconds).ignoring(StaleElementReferenceException.class);
    wait.until(new ExpectedCondition<Boolean>() {
        public Boolean apply(WebDriver driver) {

            return elementIsDisplayed(elementLocator);
        }
    });
}

public boolean elementIsDisplayed(By elementLocator) {
    if(elementExists(elementLocator)) {
        WebElement element = driver.findElement(elementLocator);
        return element.isDisplayed();
    }
    return false;
}

public boolean elementExists(By elementLocator) {
    List<WebElement> elements = driver.findElements(elementLocator);
    if (elements.size() < 1) {
        return false;
    }

    return true;
}

0
投票

Robot Framework 提供了一种在演示者模式下执行测试的方法。将以下行添加到您的机器人文件中:

*** Settings ***
    # add following line to get a step-by-step execution
    # which feels like a human being is executing the tests manually
    Library    Browser    enable_presenter_mode=true

除了机器人之外,我们还使用机器人框架浏览器。请查看官方文档:https://marketsquare.github.io/robotframework-browser/Browser.html

© www.soinside.com 2019 - 2024. All rights reserved.