【发布时间】:2019-03-21 00:31:24
【问题描述】:
我正在尝试使用 Selenium WebDriver 和 Java 测试 https://www.expedia.com/ 站点的登录功能。我也在使用页面对象工厂设计模式。
登录程序是:转到上面的站点-->单击帐户菜单-->选择“登录”选项。 出现一个新的弹出登录窗口,我正在尝试使用我的自动化脚本输入电子邮件地址和密码。
这是我处理 Expedia 登录表单的代码:
LoginPage.java 包含:
{
@FindBy(id = "gss-signin-email")
public WebElement txtUserName;
@FindBy(id = "gss-signin-password")
public WebElement txtPassword;
@FindBy(id = "gss-keep-signin-check-label")
public WebElement chkBoxKeepMeSignIn;
@FindBy(id = "gss-signin-submit")
public WebElement btnSignIn;
public void setUserName(String uname) {
txtUserName.click();
txtUserName.sendKeys(uname);
}
public void setPassword(String pwd) {
txtPassword.click();
txtPassword.sendKeys(pwd);
}
public void setKeepMeSignIn() {
chkBoxKeepMeSignIn.click();
}
public void clickSignIn() {
btnSignIn.click();
}
}
TC_LoginTest_001.java 包含:
{
Page.menu.gotoAccounts();
Page.menu.gotoSignIn();
LoginPage lp = new LoginPage();
driver.switchTo().activeElement();
lp.setUserName(config.getProperty("username"));
lp.setPassword(config.getProperty("password"));
lp.setKeepMeSignIn();
lp.clickSignIn();
}
当我使用 Run As --> TestNg Suite 运行脚本时,我收到以下错误消息:
**LoginTest
java.lang.NullPointerException
at com.expedia.pages.LoginPage.setUserName(LoginPage.java:42)
at com.expedia.testcases.TC_LoginTest_001.LoginTest(TC_LoginTest_001.java:38)**
未在输入字段(即电子邮件地址和密码)中输入测试数据。看起来我的脚本无法识别模态表单。请建议我应该如何解决这个问题。
【问题讨论】:
-
你能在调试模式下访问'setUserName'中的txtUserName吗?尝试使用下面添加的 pyton 代码时,我没有遇到任何模态表单问题。
-
@supputuri - 我的脚本能够导航到登录窗口,但它无法访问 txtUserName 或其中的任何字段。
-
您是否将驱动程序传递给班级?
LoginPage lp = new LoginPage();应该是LoginPage lp = new LoginPage(driver);吗?
标签: java selenium modal-dialog