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
相关产品推荐
相关产品推荐

