Angular + Selenium:无法从输入字段获取值

时间:2015-05-14 00:44:21

标签: javascript angularjs selenium selenium-webdriver protractor

我已经在Protractor中编写了测试,并且我使用了期望声明:

loginPage.email.sendKeys( params.login.email );
expect(loginPage.email.getText()).toEqual( params.login.email );

但是,我的测试失败了,因为signUpPage.email.getText()返回一个空字符串。我无法在Selenium的文档中找到要调用哪些函数来输入正确的值?

在我的Protractor.conf文件中:

 params: {
      login: {
        email: 'user@email.com',
        password: 'blahblah123'
      }

终端错误:

  

预期''等于' user@email.com'。

所以我试图匹配电子邮件字段的输入与我发送的电子邮件地址相同。有关如何在Selenium中做到这一点的任何建议吗?

3 个答案:

答案 0 :(得分:3)

如果这是input字段,则需要获取 value属性的值

expect(loginPage.email.getAttribute("value")).toEqual(params.login.email);

同样,要在此处应用Saifur的想法,如果您需要等待元素包含所需的值,请使用textToBePresentInElementValue Expected Condition

var EC = protractor.ExpectedConditions;
browser.wait(EC.textToBePresentInElementValue(loginPage.email, params.login.email), 5000);

请注意,必须指定超时值(以ms为单位)。

答案 1 :(得分:1)

可能元素加载时间是这里的问题。在这种情况下,您可以使用ExpectedCondition甚至匹配您要查找的文本。

var EC = protractor.ExpectedConditions;
browser.wait(EC.textToBePresentInElement(loginPage.email ,params.login.email));

<强>更新 错过了预期状况的时间。谢谢@alecxe

browser.wait(EC.textToBePresentInElementValue(loginPage.email, params.login.email), 5000);

答案 2 :(得分:1)

如果您想仅使用WebDriver实例获取AngularJS管理的输入字段的值,则可以通过一种简单的方法实现该目标。

我使用FirefoxWebDriver进行了测试,效果非常好。

基本上你必须使用JavascriptExecutor在浏览器中执行javascript代码。

如果您的Web项目有jQuery插件,那么您可以使用以下方法:

WebDriver driver = DriverFactory.getDriver();

public String getTextAt(String cssId) {
    if (driver instanceof JavascriptExecutor) {
        JavascriptExecutor javascriptExecutor = (JavascriptExecutor) driver;
        return (String) javascriptExecutor.executeScript("return $('" + cssId + "').val();");
    }
    return null;
}

如果您想使用原始javascript,可以这样做:

WebDriver driver = DriverFactory.getDriver();

public String getTextAt(String cssId) {
    if (driver instanceof JavascriptExecutor) {
        JavascriptExecutor javascriptExecutor = (JavascriptExecutor) driver;
        return (String) javascriptExecutor.executeScript("return documenet.getElementById('" + cssId + "').value;");
    }
    return null;
}

请注意,在这种情况下,cssId应该是一个id属性。