如何使用selenium处理会话超时

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

我看了一些类似问题的答案,但找不到满意的答案。

我正在构建自动化框架,我正在运行200个测试用例,并且需要大约60分钟才能完成。

应用程序的会话时间超过30分钟,因此在我的测试用例运行时,它会在30分钟后注销,然后测试用例因为无法找到所需元素而失败。

什么登录我想处理会话超时:

  1. 再次在测试用例编号#X中调用登录方法并检查是否注销然后再次登录但是这似乎不是一个好主意,好像明天的会话超时时间从30分钟更新到其他东西,我将不得不在其他一些测试用例中调用login方法。

2.如果Current time - Test start time >= 30 minutes然后检查系统是否注销,如果是,则再次登录。但是对于这个问题是相同的,就像我必须在每个方法或某些特定方法中调用它来检查每次是否注销。

所以我正在寻找一些解决方案,它从我的自动化开始不断检查,如果找到登出窗口,然后调用登录方法。

注意:我使用selenium webdriver,Java,TestNG,Maven和以下页面对象模式。

java maven selenium-webdriver pageobjects
1个回答
1
投票

所以我假设您的登录页面的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;
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.