selenium - Selenium - WebElement.Click(),页面刷新但不加载
问题描述
在 Java 中使用 pagefactory 和 selenium 3,我创建了一个简单的脚本来登录和注销。我已使用以下内容进行显式等待:
public void verifyElementisEnabled( WebElement wElement,String sFieldName){
printCurrentDate();
try{
wait.until(ExpectedConditions.elementToBeClickable(wElement));
wait.until(ExpectedConditions.visibilityOf(wElement));
**//Thread.Sleep("1000") - Script works if this line is uncommented**
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);
}
}
我面临的问题是,对于注销,单击 web 元素后,页面会短暂刷新一秒钟,但不会显示相应的登录页面,而是停留在同一页面中。在点击之前,我没有看到 weblement 有任何异常。下面是代码片段。
但是,如果我在上述“VerifyElementisEnabled”方法中使用“Thread.Sleep(1000)” ,所有这些都有效(任何小于 1000 的方法都不起作用)
@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);
}
等待 JS 和 Ajax 方法,只是验证 document.ready 状态是否完整。
我在这里没有想法,任何建议或帮助将不胜感激。
谢谢!
更新:
public void confirmHomePage(){
commonLib.verifyElementisEnabled(titleText, "User Search");
}
最终更新:看起来上面给出的父类 Test1 有问题。执行测试后,webdriver 正在返回上一页“登录”。在这里,我返回了“登录页面”类。这阻碍了页面导航。我更新了 Test1 如下:
public void afcDealerTest1(){
LoginPage objLogin = new LoginPage(driver);
objLogin.enterLoginCredentials();
HomePage objHome = objLogin.clickLoginButton();
objHome.confirmHomePage();
objHome.SignOut(); //<-- Refer to this line
objLogin.verifyLoginPage();
}
还删除了所有方法中的所有 thread.sleep,除了 JS Ready 状态为 Complete 和 200ms 睡眠。它似乎工作正常。
感谢大家的帮助。
解决方案
通过以下修改对其进行了修复:
前:
@Test
public void Test1(){
LoginPage objLogin = new LoginPage(driver);
objLogin.setUserName();
objLogin.setPwd();
HomePage objHome = objLogin.clickLoginButton();
objHome.confirmHomePage();
objLogin = objHome.SignOut();
objLogin.verifyLoginPage();
}
使固定:
@Test
public void Test1(){
LoginPage objLogin = new LoginPage(driver);
objLogin.setUserName();
objLogin.setPwd();
HomePage objHome = objLogin.clickLoginButton();
objHome.confirmHomePage();
objHome.SignOut();
objLogin.verifyLoginPage();
}
推荐阅读
- javascript - JavaScript 事件循环:不同类型事件的不同队列?
- git - 在 Git 存储库之间共享单个源文件(来自 VSS 2005)
- composer-php - Testing pull requests
- javascript - 如何从javascript中的对象数组中提取对象
- spring - 当异常不可重试时向 DLQ 发送消息
- c# - ExchangeService FindItems 突然间断不工作
- html - 如何去除底部的空白
- azure - 将 DropWizard 部署到 Azure
- jenkins - 在用户级别设置环境变量
- python - 将表格插入邮件正文