【问题标题】:clear().sendKeys() twice is failed in protractorclear().sendKeys() 两次在量角器中失败
【发布时间】:2015-03-27 03:48:09
【问题描述】:

我正在测试 AngularUI - 输入掩码, 这是我的代码的一部分:

it('should validate the peopleID', function() {

        element(by.id('pid')).clear().sendKeys("H12333333A").then(function() {
            expect(element(by.id('pid')).getAttribute('value')).not.toMatch("H12333333A");
        });

        element(by.id('pid')).clear().sendKeys("H123333331").then(function() {
            expect(element(by.id('pid')).getAttribute('value')).toMatch("H123333331");
        });
});

错误信息是: Expected: '' to match 'H123333331'.

另一个测试代码:

    it('just a little test', function() {

        browser.get("http://angular-ui.github.io/ui-utils/");
        browser.ignoreSynchronization = true;
        element(by.css('[ng-click="y = \'(999) 999-9999\'"]')).click().then(function() {
            element(by.name('masked')).clear().sendKeys("999248551a").then(function() {
                expect(element(by.name('masked')).getAttribute('value')).not.toMatch("999248551a");
            });
            element(by.name('masked')).clear().sendKeys("9992485512").then(function() {
                expect(element(by.name('masked')).getAttribute('value')).toMatch("9992485512");
            });
        });
    });

错误信息是: Expected: '(992) 485-5129' to match '(999) 248-5512'.

My Configuration:
protractor 1.6.1 
selenium-server-standalone 2.44.0 
Chrome 40.0.2214.93
IE 11
Firefox 34.0.5

浏览器执行clear()sendKeys() 然后执行expect 语句,但它没有在第一次测试时将文本插入<input ...>,所以我得到了空文本。在第二次测试时,它没有完全清除输入值。

看起来像 github 问题#1511:https://github.com/angular/protractor/issues/1511 ,但问题说它只是发生在“仅火狐”。我已经尝试将焦点转移到 在插入错误文本和正确文本之间的另一边,再次收到相同的错误消息。

那我做错了什么?非常感谢。

【问题讨论】:

  • 这对你有用吗? gist.github.com/hankduan/418ea946cb5129fe0606。我刚刚尝试了一个公共网站,它可以工作。
  • 它工作正常,但我注意到 clear().sendKeys() 在我测试输入掩码时失败了。我添加了第二个测试及其错误消息,也许“输入掩码”是关键点?

标签: javascript angularjs selenium webdriver protractor


【解决方案1】:

掩码和不同输入类型(数字、日期等)与 webdriver 的 sendKeys 混淆存在一些已知问题。

要使用掩码,我知道的最可靠的方法是使用 executeScript 直接设置值:

browser.executeScript('arguments[0].value = "(123) 456-7890";', element(by.name('masked')).getWebElement());
expect(element(by.name('masked')).getAttribute('value')).toEqual("(123) 456-7890");

【讨论】:

  • 如果使用browser.executeScript('arguments[0].value = "(123) 456-78ab";', element(by.name('masked')).getWebElement()); 不正确的值将通过验证,那么我将得到“(123) 456-78ab”而不是“(123) 456-78__”。
猜你喜欢
  • 1970-01-01
  • 2015-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
相关资源
最近更新 更多