量角器:browser.isElementPresent()给出true和false

时间:2016-10-12 13:56:20

标签: reactjs protractor cucumber chai-as-promised

我正在使用Protractor和Cucumber来测试React项目。在这个过程中,我有一些具有可见性的元素:隐藏/可见,我想使用Protractor的isDisplayed或isPresent来测试。

我写了一点测试,因为我得到了一些奇怪的输出,它看起来像这样:

  this.Then(/^skal jeg kunne legge inn et nummer$/, function () {
    var inputfelt = element(by.css(".mdl-textfield__input"))
    expect(browser.isElementPresent(inputfelt)).to.eventually.equal(true)
    expect(browser.isElementPresent(inputfelt)).to.eventually.equal(false)
});

这是我使用browser.isElementPresent的最后一个版本。我还使用了inputfelt.isDisplayed和inputfelt.isPresent,并且对于这三个测试都通过了测试。

我无法看到它应该如何传递,因为该字段不能同时存在且不存在。

我使用这个错误吗?

2 个答案:

答案 0 :(得分:0)

我认为你应该使用包装器,因为你正在使用promises。因此,任何一个已解决的承诺都会通过测试。 请尝试以下代码:

this.Then(/^skal jeg kunne legge inn et nummer$/, function () {
    var inputfelt = element(by.css(".mdl-textfield__input"))
    return protractor.promise.all([
      expect(browser.isElementPresent(inputfelt)).to.eventually.equal(true),
      expect(browser.isElementPresent(inputfelt)).to.eventually.equal(false)
    ]);
});

答案 1 :(得分:0)

您现在可以使用protractor-react-selector通过React的组件,道具和状态来识别Web元素。这将自动等待,以便在您的应用中加载REACT,然后识别网络元素。它可以使您免去执行额外的变通办法。

您可以通过以下方式识别目标元素:

const myElement = element(
    by.react('MyComponent', { someBooleanProp: true }, { someBooleanState: true })
);

让我知道这是否有帮助!