Java 如何使用selenium处理会话超时
我看了一些类似问题的答案,但找不到满意的答案 我正在构建自动化框架,在这里我运行200个测试用例,大约需要60分钟才能完成 应用程序的会话时间超过30分钟,所以当我的测试用例运行时,它会在30分钟后注销,然后测试用例会失败,因为它找不到所需的元素 我想用什么登录来处理会话超时: 在测试用例号X中再次调用login方法,检查是否注销,然后再次登录,但这似乎不是一个好主意,因为如果明天会话超时时间从30分钟更新为其他时间,我将不得不在其他测试用例中调用login方法。 2.如果当前时间-测试开始时间>=30分钟,则检查系统是否注销,如果是,则再次登录。但对于这个问题,我必须在每个方法中调用它,或者在某些特定方法中调用它,以检查每次是否注销 所以,我正在寻找一些解决方案,它从我的自动化开始不断检查,若发现注销窗口,然后调用登录方法Java 如何使用selenium处理会话超时,java,maven,selenium-webdriver,pageobjects,Java,Maven,Selenium Webdriver,Pageobjects,我看了一些类似问题的答案,但找不到满意的答案 我正在构建自动化框架,在这里我运行200个测试用例,大约需要60分钟才能完成 应用程序的会话时间超过30分钟,所以当我的测试用例运行时,它会在30分钟后注销,然后测试用例会失败,因为它找不到所需的元素 我想用什么登录来处理会话超时: 在测试用例号X中再次调用login方法,检查是否注销,然后再次登录,但这似乎不是一个好主意,因为如果明天会话超时时间从30分钟更新为其他时间,我将不得不在其他测试用例中调用login方法。 2.如果当前时间-测试开始时间
注意:我使用的是selenium webdriver、Java、TestNG、Maven和以下页面对象模式。因此我假设您的登录页面与实际应用程序中的任何页面具有不同的url。如果您还没有使用testng@BeforeTest的方法,可以创建一个,并在新的或现有的BeforeTest方法中包含以下内容:
if (driver.getCurrentUrl() == "whatever.yourLoginPageUrl.is") {
//call login method or do whatever you have to do to login
//If you want to rerun the previous test that probably failed, do that here
}
我认为一种稍微巧妙的方法是实现IRetryAnalyzer接口并覆盖重试函数,例如
public class MyRetry implements IRetryAnalyzer {
@Override
public boolean retry(ITestResult result) {
if (driver.getCurrentUrl() == "loginPageUrl") {
//call login function or do whatever you need to to login
return true;
}
return false;
}
}
从selenium的角度来看,超时时会发生什么?页面是否立即消失或保持缓存或其他状态,并在重定向时启动?如果使用LoadableComponent,则创建一个Basepageobject,在其中检查isLoaded是否注销。如果已注销,请重新登录并继续。这在测试的第一页发生的情况下有效。考试中呢?也许看看测试失败,然后立即或在最后重新运行@Peck-当用户超时时立即注销并重定向到登录。这很有帮助。我创建了一个检查当前URL的方法,并用@beforeMethod标记它。