量角器用行号获取textarea的值

时间:2016-03-01 00:13:34

标签: angularjs twitter-bootstrap protractor

我正在使用Protractor来测试我的Bootstrap AngularJS应用程序。 textarea“input”和“output”具有与之关联的行号。 因此,当我使用element(by.id('output')).getText()检查“output”textarea的值时,它总是returns line number'1'而不是textarea中的值。下面是html和spec.js文件的片段

homepage.html

<div>
    <textarea id= "input" ui-codemirror="{ onLoad : editorLoaded }"
                        ng-model="input" ng-trim="false"></textarea>
    <textarea id="output" ui-codemirror="viewerOptions"
                    ng-model="output"></textarea>
</div>

homepage.spec.js

describe('homepage', function() {

  it('check if output matches input', function() {
        browser.get('your url');
        var input = element(by.model('input'));
        input.sendKeys('abc;');
        var result = element(by.id('output'));
        expect(result.getText()).toEqual('abc;');
    });

});

关于如何解决这个问题的任何指针???

2 个答案:

答案 0 :(得分:4)

对于inputtextarea元素,您应始终使用getAttribute('value')代替getText()。以下是如何使用它 -

var result = element(by.id('output'));
expect(result.getAttribute('value')).toEqual('abc;');

有关为什么getText不能对输入元素起作用的更多信息,请检查量角器faq: https://github.com/angular/protractor/blob/master/docs/faq.md#the-result-of-gettext-from-an-input-element-is-always-empty

希望它有所帮助。

答案 1 :(得分:0)

问题:无法从TexArea获取值。调试问题后,我发现根本原因是sendKey()api。我使用下面的代码片段将文本写入TextArea,但浏览器始终显示空字段。

var input = element(by.model('input'));
input.sendKeys('abc;');

解决方案:经过大量试验和错误后发现browser.actions().sendKeys('abc;').perform();有助于将文本输入TextArea。 perform()api使用当前驱动程序创建一个新的动作序列。

describe('Testing UI', function() {

    it('opens a workshop page', function() {
        browser.get('url');
        browser.sleep(2000); 
    });

    it('starts editing', function() {
        var inputField = element(by.id('input'));
        browser.actions().doubleClick(inputField).perform();
    });

    it('enters some text', function() {

        var inputField = element(by.id('input'));
        browser.actions().sendKeys('abc;').perform();

        browser.sleep(3000); // to let you see the result

        var inputcharcount = inputField.getAttribute('value').length;
        expect(inputcharcount,4);

        var result = element(by.id('output'));
        expect(result.getText()).toEqual('abc;');
    });
});

我使用了element(by.id(&#39; output&#39;))。getText()api从输出textarea中获取值。因此,在输入textarea(sendKey)中输入文本并在生成的textarea(getText)中处理输出的完整测试用例可以正常工作。