量角器:在写入文本框进行e2e测试后尝试读取文本

Fra*_*ank 7 html javascript angularjs protractor 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>
Run Code Online (Sandbox Code Playgroud)

这将给我一个文本框,旁边有一个标签,上面写着"名字".

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

element(by.model('first_name')).sendKeys('Frank');
Run Code Online (Sandbox Code Playgroud)

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

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

expect(element(by.model('first_name')).getText()).to.equal('Frank');
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

AssertionError:期望{Object(locator_,parentElementFinder_,...)}等于'Frank'

当我尝试做一个:

console.log(element(by.model('first_name')).getText());
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

{locator_:{findElementsOverride:[功能],的toString:[功能:的toString]},parentElementFinder_:空,opt_actionResult_:{然后:[功能:然后],取消:[功能:取消],isPending:[功能:isPending]} ,opt_index_:未定义,单击:[功能],的SendKeys:[功能],getTagName:[功能],
getCssValue:[功能],的getAttribute:[功能],的getText:[功能],的getSize:[功能],的getLocation:功能],
的IsEnabled:[功能],isSelected:[功能],提交:[功能],明确:[功能],isDisplayed:[功能],getOuterHtml:[功能],getInnerHtml:[功能],toWireValue:[功能] }

尝试使用时,我得到同样的错误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');
});
Run Code Online (Sandbox Code Playgroud)

ale*_*cxe 8

由于这是input您正在使用的元素,因此您需要读取value属性:

expect(element(by.model('first_name')).getAttribute('value')).toEqual('Frank');
Run Code Online (Sandbox Code Playgroud)

实际问题是您要覆盖expect()- 在这种情况下,您需要使用then()以下方法手动解决承诺:

element(by.model('first_name')).getAttribute('value').then(function (value) {
    expect(value).to.equal('Frank');
});
Run Code Online (Sandbox Code Playgroud)