量角器:写入文本框后尝试读取文本以进行端到端测试

Protractor: Trying to read text after writing to text box for e2e testing

在我的 html 文档中,我有以下代码:

<label class="field" for="first_name">First Name:</label>
<span class="pull-right"><input type="text" id="first_name">
    name="first_name" ng-model="first_name">
</span>

这会给我一个文本框,旁边有一个标签,上面写着 "First Name"。

然后我使用以下代码在文本框中写下我的名字:

element(by.model('first_name')).sendKeys('Frank');

此代码将在文本框中写入 Frank,但现在我的目标是尝试从文本框中读取文本以确保它确实写入了我的名字。这样做我遇到了很多麻烦。

我尝试使用以下代码从文本框中读取:

expect(element(by.model('first_name')).getText()).to.equal('Frank');

但是我得到这个错误:

AssertionError: expected { Object (locator_, parentElementFinder_, ...) } to equal 'Frank'

另外,当我尝试执行以下操作时:

console.log(element(by.model('first_name')).getText());

我收到这个错误:

{ locator_: { findElementsOverride: [Function], toString: [Function: toString] }, parentElementFinder_: null, opt_actionResult_: { then: [Function: then], cancel: [Function: cancel], isPending: [Function: isPending] }, opt_index_: undefined, click: [Function], sendKeys: [Function], getTagName: [Function],
getCssValue: [Function], getAttribute: [Function], getText: [Function], getSize: [Function], getLocation: [Function],
isEnabled: [Function], isSelected: [Function], submit: [Function], clear: [Function], isDisplayed: [Function], getOuterHtml: [Function], getInnerHtml: [Function], toWireValue: [Function] }

我在尝试使用 getAttribute('value') 时遇到同样的错误。我不确定错误的确切含义,也不太确定我在使用 console.log() 时看到的是什么。我对使用量角器有点陌生。非常感谢任何帮助,并提前致谢。

编辑:完整 spec.js

var chai            = require('chai'),
    chaiAsPromised  = require('chai-as-promised');

chai.use(chaiAsPromised);

expect = chai.expect;

before(function() {
    // suite wide initial setup here
    browser.get("http://127.0.0.1:5000/");
    browser.waitForAngular();
});

it('Should redirect and load template',function(){
    element(by.id('authentication'))
        .element(by.css('.text-center'))
        .element(by.linkText('Click here'))
        .click();
    expect(browser.getCurrentUrl()).to.eventually.have.string('/#/home');
});

it('Should Enter name into text box', function(){
    element(by.model('first_name')).sendKeys('Frank');
    expect(element(by.model('first_name')).getAttribute('value'))
        .to.equal('Frank');
});

因为这是您正在使用的 input 元素,您需要阅读 value 属性:

expect(element(by.model('first_name')).getAttribute('value')).toEqual('Frank');

实际问题是您正在覆盖 expect() - 在这种情况下,您需要使用 then():

手动解决承诺
element(by.model('first_name')).getAttribute('value').then(function (value) {
    expect(value).to.equal('Frank');
});