[英]Good ways to slow down a test run using Robot Framework?
因此,我是Robot Framework的新手,并且已经多次遇到该问题的各种形式。 本质上,我创建了一组测试,这些测试最终通过并检查了我期望的内容,然后通过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
因此,基本上,尽管这些功能在功能上是正确的,但有时在测试运行程序上运行时它们什么也不会退缩。 我认为这是因为事情发生得太快了,所以我添加了一个“等待页面包含元素”,不幸的是,这个问题仍然存在。 是否有最好的方法来处理这种情况,使其始终如一地通过?
我以为在期望的变量值上添加关键字直到成功,这会很可怕,但很高兴被证明是错误的!
drkthng的推理是正确的,但是您不需要编写所有代码……它已经存在于ExpectedConditions
。 一个简单的例子
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.presenceOfElementLocated(locator));
查看所有可用方法(有很多方法)的文档以及如何使用它们。
即使您觉得这很可怕,我认为减慢Selenium速度的最佳方法是保持轮询元素属性,直到获得适当的变量为止。 尝试成功之前没有任何害处。 如果您有错误,则属性值永远不会正确。 我相信,仅在这种情况下才使用“ 等待关键字成功”关键字。 我用它所有的时间。
尽可能避免睡眠。
隐式等待也不是可扩展的解决方案。 例如,如果您正在检查元素的“不存在”,它们可以使您退缩。
我建议您充分利用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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.