java - 如何使用selenium处理 session 超时

标签 java maven selenium-webdriver pageobjects

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

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

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

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

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

2.如果当前时间 - 测试开始时间 >= 30 分钟s,则检查系统是否注销,如果是则重新登录。但对于这个问题,就像我必须在每个方法或某些特定方法中调用它来检查每次是否注销一样。

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

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

最佳答案

因此,我假设您的登录页面的 URL 与实际应用程序中的任何页面的 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 接口(interface)并覆盖重试函数,例如像这样

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;
  }
}

关于java - 如何使用selenium处理 session 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55371841/

相关文章:

java - 防止 Java 重定位对象

java - Spring-MVC PathVariable匹配不以word开头的正则表达式

maven - Hamcrest 1.3 和 JUnit 4.11 的 NoSuchMethodError

Spring Hello World HTTP 状态 500 Servlet Init

java - 显示每个字符之间有延迟的字符

java - 无法在后台线程上执行工作

java - 在 Liferay 上部署 SpringMVC 项目。错误 : ERROR [com. liferay.portal.kernel.deploy.auto.AutoDeployScanner][AutoDeployDir:220]

java - Selenium Grid,如何将 WebDriver 与 ThreadSafeSeleniumSessionStorage.session() 一起使用

java - 方法 public static org.openqa.selenium.WebDriver MyTestNG.Baseurl.basic() 错误

ruby - 如何使用 ruby​​ 使用 selenium webdriver 从 har 文件读取请求