gpt4 book ai didi

Selenium:WAITING服务器响应的时间是否足够长?

转载 作者:行者123 更新时间:2023-12-01 08:14:11 25 4
gpt4 key购买 nike

我们有 大型 selenium 脚本套件,一些测试“不稳定”:在 CI 构建上它们失败但在开发机器上它们没问题。

我们假设原因在于性能:CI 构建比开发机器慢,并且我们的应用程序会在操作后直接阻止与网络应用程序的任何交互,直到服务器响应返回。

这让我想到了这个问题:

客户端如何知道服务器可能需要多长时间?

我们可以在每次点击后等待很长时间 -> 但这会严重降低测试套件的速度。

是否有技巧可以等待足够长的时间

由于我们的套件太大,我不想在每个测试用例中维护/处理它,而是一般在测试框架或服务器端维护/处理它。

我对 selenium 没有太多的技术经验,但这听起来更像是一个概念性问题。

最佳答案

这就是您可以执行的操作(在较高级别)。

在客户端上,您可以调用您的 API。当 API 完成时(无论是成功还是失败),您可以设置一个全局变量来表明 API 已完成。

$.getJSON('/some/endpoint.xhtml', {
someParam: someVar
})
.done(function (data) {
// do work
})
.fail(function (data) {
// do error handling
})
.always(function(data) {
// window.testVars will need to be initialized earlier
// like so : window.testVars = { completedEndoint = 0 };
window.testVars.completedEndpoint++;
});

然后在 Java Selenium 代码中,您可以通过 JavascriptExecutor 驱动程序访问这些变量。

private static Map<String, Object> getState(WebDriver driver)
{
Map<String, Object> map = (Map<String,Object>)((JavascriptExecutor)driver).executeScript("return window.testVars");
return map;
}

然后在你的测试中你可以使用:

Map<String,Object> defState = initializeState(driver);
performUseCaseToCallTheEndpoint();

ExpectedCondition<Boolean> condition = new ExpectedCondition<Boolean>()
{
@Override
public Boolean apply(WebDriver driver)
{
Map<String,Object> curState = getState(driver);
if(curState.get("completedEndpoint") > defState get("completedEndpoint"))
{
return true;
}
else
{
return false;
}
}
};
WebDriverWait wait = new WebDriverWait(driver, 60);
wait.until(condition);

这应该可以帮助您入门。

关于Selenium:WAITING服务器响应的时间是否足够长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15336868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com