Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用selenium处理会话超时_Java_Maven_Selenium Webdriver_Pageobjects - Fatal编程技术网

Java 如何使用selenium处理会话超时

Java 如何使用selenium处理会话超时,java,maven,selenium-webdriver,pageobjects,Java,Maven,Selenium Webdriver,Pageobjects,我看了一些类似问题的答案,但找不到满意的答案 我正在构建自动化框架,在这里我运行200个测试用例,大约需要60分钟才能完成 应用程序的会话时间超过30分钟,所以当我的测试用例运行时,它会在30分钟后注销,然后测试用例会失败,因为它找不到所需的元素 我想用什么登录来处理会话超时: 在测试用例号X中再次调用login方法,检查是否注销,然后再次登录,但这似乎不是一个好主意,因为如果明天会话超时时间从30分钟更新为其他时间,我将不得不在其他测试用例中调用login方法。 2.如果当前时间-测试开始时间

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

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

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

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

在测试用例号X中再次调用login方法,检查是否注销,然后再次登录,但这似乎不是一个好主意,因为如果明天会话超时时间从30分钟更新为其他时间,我将不得不在其他测试用例中调用login方法。 2.如果当前时间-测试开始时间>=30分钟,则检查系统是否注销,如果是,则再次登录。但对于这个问题,我必须在每个方法中调用它,或者在某些特定方法中调用它,以检查每次是否注销

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


注意:我使用的是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标记它。