当我们在BrowserStack上执行相同的端到端浏览器自动化测试时,我们注意到显着的减速--测试比在本地执行要慢得多,而且由于时间问题,偶尔也会出现故障。我们试图通过添加显式等待来解决故障,这样做总体上降低了测试的可读性,降低了测试流程的可理解性和干净性。
提高端到端测试执行速度的一般准则是什么?
我们的堆栈包括Protractor/WebDriverJS;我们使用grunt
任务启动本地构建服务器,并通过ngrok
将其公开给BrowserStack。
发布于 2018-03-29 00:28:19
在加速量角器(Selenium)测试时,我发现了以下几点:
browser.manage().timeouts().implicitlyWait(0);
browser.wait(function () {
browser.sleep(1000);
return element(by.id('id1')).isDisplayed()
.then(
function (isDisplayed) {
return isDisplayed;
},
function (error) {
return false
});
}, 20 * 1000);
发布于 2017-07-11 04:55:18
从我的观点来看,这里有一些提高GUI自动化端到端测试执行速度的通用指南。
1-通过使用唯一的属性/属性来定义测试对象来构建一个实体对象库。
将测试脚本划分为简单的小测试功能(不要重新实现复杂的业务)。
3-定义添加同步函数的正确点(移动到新页面,等待对象出现/消失,等待属性更改,.....etc)。
4-使用动态等待而不是隐式,以获得测试对象的正确行为/属性。
5-将驱动程序超时(Selenium)修改为1:5秒,因为每次使用FindElement()函数时,驱动程序都会等待,直到DOM中加载的对象或抛出异常为止。
结论 --通过一种方法设计您的测试脚本,以获得工具速度的好处,并与应用程序性能同步。
Selenium/C#动态等待对象在DOM中加载并显示在GUI上的示例。
要求以下功能:
Public IwebElement TestObject;
TestObject.Exists(5); // where 5 is time out by seconds.
public static bool Exists(this IWebElement element,int timeOut)
{
//GlobalVars.Test.Browser is IwebDriver Object
bool isExist = false;
// check that element is not null;
if (element == null)
{
return false;
}
// check the element existance.
try
{
GlobalVars.Test.Browser.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(0);
WebDriverWait wait = new WebDriverWait(GlobalVars.Test.Browser, TimeSpan.FromSeconds((double)timeOut));
wait.IgnoreExceptionTypes(typeof(StaleElementReferenceException));
isExist = wait.Until<bool>((d) => { try { return element.Displayed; } catch (Exception ex) { return false; } });
return isExist;
}
catch (Exception ex)
{
return false;
}
finally
{
GlobalVars.Test.Browser.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(GlobalVars.Test.BrowserTimeOut);
}
}
https://sqa.stackexchange.com/questions/28446
复制相似问题