如何使用 selenium 处理会话超时

How to handle session timeout with selenium

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

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

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

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

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

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

所以我正在寻找一些解决方案,它从我的自动化开始时不断检查,如果发现注销 window 然后调用登录方法。

注意:我正在使用 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;
  }
}