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

5ktev3wc  于 2023-08-02  发布在  Angular
关注(0)|答案(3)|浏览(139)

我用Protractor编写了测试,并使用了一个expect语句:

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中做到这一点吗?

rqenqsqc

rqenqsqc1#

如果是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为单位)。

q0qdq0h2

q0qdq0h22#

如果你想获取一个由AngularJS管理的输入字段的值,只使用一个WebDriver示例,有一个简单的方法可以实现。
我使用FirefoxWebDriver测试了它,它运行得很好。
基本上,您必须使用Javascript Executor在浏览器中执行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属性。

ig9co6j1

ig9co6j13#

元素加载时间可能是这里的问题。在这种情况下,您可以使用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);

相关问题