【问题标题】:JavaScript Protractor (Selenium) verify if input is focusedJavaScript Protractor (Selenium) 验证输入是否聚焦
【发布时间】:2017-06-29 04:26:04
【问题描述】:

我正在尝试在量角器中使用 selenium webdriver 测试元素是否聚焦。这是在加载 AngularJS 之前,所以我必须使用这里看到的驱动程序:

var ptor = protractor.getInstance(),
    driver = ptor.driver;

我还需要知道如何让测试等到输入聚焦。我必须等到模型被触发,所以输入没有集中半秒,如下所示:

window.setTimeout(function(){
  $("input#email").focus();
}, 500);

知道如何在 500 毫秒后验证输入是否有焦点吗?

【问题讨论】:

标签: selenium protractor


【解决方案1】:

根据我对this question 的回答,并根据您的情况进行调整,它看起来像:

it('should focus on foo input', function () {
    // to wait 500ms+
    browser.driver.sleep(600);

    // using the Protractor 'element' helper
    // https://github.com/angular/protractor/blob/master/docs/api.md#element
    // var input = element(by.id('foo'));

    // using findElement with protractor instance
    var input = driver.findElement(protractor.By.id('foo'));

    expect(input.getAttribute('id')).toEqual(browser.driver.switchTo().activeElement().getAttribute('id'));
});

【讨论】:

  • 这明白了。谢谢!通过 ID 获取元素的语法有一点不同,倒数第二行需要一个额外的括号,但除此之外它就像一个魅力。在下面使用正确的语法和括号添加另一个答案。再次感谢!!
  • 你说得对,我编辑了我的答案来修复这个缺失的括号;)我猜简短的element(by.id()) 语法对你不起作用,因为在你的情况下没有加载角度?
  • 没错。在我的用例中,登录模式是在 Angular 之外的营销网站上触发的。再次感谢!
  • assertionError: 预期 { Object (browser_, then, ...) } 等于 { Object (flow_, stack_, ...) }
【解决方案2】:

我使用了glepretre's answer,但必须使用 promise.all 解决两个元素的 getAttribute 承诺

let activeElement = browser.driver.switchTo().activeElement().getAttribute('id');
let compareElement = element(by.id('your-element-id')).getAttribute('id'); 
webdriver.promise.all([compareElement, activeElement]).then((id) => {
    expect(id[0]).to.equal(id[1]);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    相关资源
    最近更新 更多