You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium WebElement点击后页面刷新但不加载登录页问题求助

登录登出自动化测试:Selenium页面跳转异常问题排查与解决

最近我在用Java结合Selenium 3和PageFactory编写登录登出的自动化测试脚本时,遇到了一个棘手的页面跳转问题,折腾了好一阵才找到根源,分享下整个过程:

初始实现与问题现象

首先我封装了一个显式等待方法来验证元素是否可用:

public void verifyElementisEnabled( WebElement wElement,String sFieldName){
    printCurrentDate();
    try{
        wait.until(ExpectedConditions.elementToBeClickable(wElement));
        wait.until(ExpectedConditions.visibilityOf(wElement));
        //Thread.Sleep("1000") - 取消注释后脚本正常运行
        if (wElement.isEnabled()==true)
            System.out.println(sFieldName + " is enabled");
        printCurrentDate();
    }catch (Exception e){
        printCurrentDate();
        System.out.println(sFieldName + " is NOT enabled");
        Assert.fail(sFieldName + " Field not found", e);
    }
}

测试核心流程代码如下:

@Test
public void Test1(){
    LoginPage objLogin = new LoginPage(driver);
    objLogin.setUserName();
    objLogin.setPwd();
    HomePage objHome = objLogin.clickLoginButton();
    objHome.confirmHomePage();
    objLogin = objHome.SignOut();
    objLogin.verifyLoginPage();
}

public LoginPage SignOut(){
    commonLib.click_webelement(SignOut,"Sign Out");
    commonLib.waitForPagetoLoadJS_Ajax();
    return new LoginPage(driver);
}

其中waitForPagetoLoadJS_Ajax方法仅验证document.ready状态是否完成。

遇到的问题很奇怪:点击登出按钮后,页面会短暂刷新1秒,但始终停留在原页面,没有跳转到登录页。点击操作本身没有触发任何WebElement相关的异常,但只有在verifyElementisEnabled方法里添加Thread.Sleep(1000)(小于1000毫秒还没用)时,脚本才能正常执行。

中间排查补充

后来我补充了首页确认的方法,确保登录成功后确实进入了首页:

public void confirmHomePage(){
    commonLib.verifyElementisEnabled(titleText, "User Search");
}

最终解决方案

经过反复排查,终于发现问题出在测试方法的父类逻辑上:测试执行后WebDriver会自动返回到之前的登录页,而SignOut()方法返回LoginPage实例的操作,直接阻碍了页面导航的正常执行。

于是我修改了测试方法,去掉了对SignOut()返回值的接收:

public void afcDealerTest1(){
    LoginPage objLogin = new LoginPage(driver);
    objLogin.enterLoginCredentials();
    HomePage objHome = objLogin.clickLoginButton();
    objHome.confirmHomePage();
    objHome.SignOut(); //<-- 关键修改:不再接收返回的LoginPage实例
    objLogin.verifyLoginPage();
}

同时我移除了所有方法中的Thread.Sleep,仅保留JS就绪状态验证时的200毫秒睡眠,现在脚本已经可以完全正常运行了!

内容的提问来源于stack exchange,提问作者swame_sp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:33:53