如何使用Selenium处理会话超时

时间:2019-03-27 07:26:31

标签: java maven selenium-webdriver pageobjects

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

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

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

我正在考虑处理会话超时的登录名​​:

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

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

因此,我正在寻找某种解决方案,该解决方案应从自动化开始就不断检查是否找到注销窗口,然后调用登录方法。

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

1 个答案:

答案 0 :(得分: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;
  }
}