当前位置: 首页 > 知识库问答 >
问题:

如何使用Java选择模式表单并将数据输入到输入字段

宓昂雄
2023-03-14

我试图测试登录功能https://www.expedia.com/网站使用Selenium WebDriver与Java。我也使用页面对象工厂设计模式。

登录的步骤是:转到上面的网站-

以下是我处理Expedia登录表单的代码:

登录页面。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运行脚本时--

**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)**

未在输入字段中输入测试数据(即电子邮件地址和密码)。我的脚本似乎无法识别模态形式。请建议我应该如何解决这个问题。

共有2个答案

臧俊杰
2023-03-14

这是我运行没有任何问题的python代码。wait_for_element_present是一个方法,它将等到元素预设并返回webelement。

url = "https://www.expedia.com/ "
driver.get(url)

driver.find_element_by_css_selector("#header-account-menu").click()
accountSignIn = wait_for_element_present('css',"#account-signin")
accountSignIn.click()
email = wait_for_element_present('css',"#gss-signin-email")
email.send_keys("hello")
driver.find_element_by_css_selector("#gss-signin-password").send_keys("hello")
driver.find_element_by_css_selector("#gss-signin-submit").click()

Java代码相当于我上面代码中的wait_for_element_present。示例代码源表单https://www.seleniumhq.org/docs/04_webdriver_advanced.jsp]

WebElement myDynamicElement = (new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement")));
江英卓
2023-03-14

必须切换到新窗口才能访问元素。下面是完整的java代码。希望这有帮助。

public static void main(String[] args) {

        System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir") + File.separator + "\\Executables\\Chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.expedia.com/");     
        String parentHandle = driver.getWindowHandle(); 
        WebElement element=driver.findElement(By.id("header-account-menu"));
        Actions action=new Actions(driver);
        action.moveToElement(element).click().build().perform();
        driver.findElement(By.id("account-signin")).click();
        for (String winHandle : driver.getWindowHandles()) {
            driver.switchTo().window(winHandle); 
            WebDriverWait wait = new WebDriverWait(driver, 30);
            WebElement elementemail = wait.until(ExpectedConditions.elementToBeClickable(By.id("gss-signin-email")));
            elementemail.sendKeys("xyz@gmail.com");
            WebElement elementpass = wait.until(ExpectedConditions.elementToBeClickable(By.id("gss-signin-password")));
            elementpass.sendKeys("xxxxxxx");

        }
        driver.switchTo().window(parentHandle); 

        }

输出:

 类似资料:
  • 我有一个谷歌表单,我要求用户包含他们的“全名”,以保持表单简短甜蜜(没有名字/姓氏的两个输入)。您可以使用正则表达式验证谷歌表单中的答案,但我不确定从哪里开始。 我希望在输入中至少有两个单词,每个单词至少有2个字符,并且我不想屏蔽任何特殊字符(以便像O'Leary这样名字的人仍然可以编写它)。基本上,我只想确保一个字段中包含两个单词,每个单词至少有2个字母。 我没有使用正则表达式或模式的经验,因此

  • 使用JQuery Datatable与输入和选择如下图所示:http://datatables.net/examples/api/form.html或者如果我使用自定义列渲染处理程序来生成输入和选择如何使全局表搜索工作? 如果您查看这个示例,您会注意到搜索中只包含第一列,即只读列,我可以做些什么来将其他列包含在搜索中? 如果您在“我的问题”的链接中查看示例,并在搜索中键入“Tokyo”,则返回所有

  • 我想让程序根据我的扫描仪输入从ArrayList中进行选择。比如,我写早餐和甜食,它必须随机列出早餐甜食,并打印随机索引。 我还在学习Java,我只是在玩,并试图编码小项目来训练它。 下面是我已经写过的课程: 我是否可以将列表存储在变量中,可能是这样的: 我知道很难理解我,但英语不是我的主要语言,希望它能被理解。

  • 问题内容: 我试图在下面的字段中限制输入为数字 它不适用于 它适用于以下代码,但同时更改了两个字段 需要更改用户正在输入的输入字段的值,而不是两者都更改 问题答案: 使用此处找到的指令:而不是ng-change函数。复制此处以方便参考:

  • 创建根据数据量动态增长的HTML表 使用Python将MySQL数据库中的数据输入到表中 我想要一个不使用PHP的解决方案 我对MySQL、HTML和Python非常陌生,因此非常感谢任何帮助。提前谢谢!