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

Rya*_*ake 6 javascript selenium angularjs selenium-webdriver protractor

我已经在 Protractor 中编写了测试,并且使用了一个 expect 语句:

loginPage.email.sendKeys( params.login.email );
expect(loginPage.email.getText()).toEqual( params.login.email );
Run Code Online (Sandbox Code Playgroud)

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

在我的 Protractor.conf 文件中:

 params: {
      login: {
        email: 'user@email.com',
        password: 'blahblah123'
      }
Run Code Online (Sandbox Code Playgroud)

终端错误:

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

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

ale*_*cxe 6

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

expect(loginPage.email.getAttribute("value")).toEqual(params.login.email);
Run Code Online (Sandbox Code Playgroud)

同样,在这里应用 Saifur 的想法,如果您需要等待元素包含所需的值,请使用textToBePresentInElementValueExpected Condition

var EC = protractor.ExpectedConditions;
browser.wait(EC.textToBePresentInElementValue(loginPage.email, params.login.email), 5000);
Run Code Online (Sandbox Code Playgroud)

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

  • “获取`value` 属性的值”。不。开发人员在 99.99..% 的时间里想要的不是 `value` *attribute* 的值,而是 `value` *property* 的值。当用户更改 `input` 时,它会改变 *property* 而 *attribute* 保持不变(除非添加了代码来更改它)。由于他们无限缺乏智慧,Selenium 开发人员决定对 `.getAttribute("value")` 进行特殊处理,并返回 *property* 的值而不是 *attribute* 的值。这肯定会误导人们直接使用 DOM 或其他工具。 (2认同)