实习生:检查不应存在的元素

时间:2015-12-15 18:04:21

标签: javascript selenium-webdriver functional-testing intern

我正在为我们构建的具有“只读”功能的自定义下拉控件编写功能测试。我们为此提出的原始测试计划是确保在单击下拉列表时没有绘制“列表”,这是正常情况。在绘制之前,列表中的标记不存在。

功能测试如下:

'can respond to clicks while in read-only mode, but will not open the menu': function() {
    return this.remote
      .get(require.toUrl('/tests/dropdown/readonly'))
      .setFindTimeout(10)
      // Click the dropdown pseudo element
      .findById('readonly-dropdown-shdo')
        .click()
        .end()
      // attempt to find the dropdown list (should not exist because this is a "readonly" dropdown)
      .findById('dropdown-list')
        .then(function(element) {
          expect(element).to.be.empty;
        })
        .end()
      // Check the currently active element (should be the psuedo-element)
      .getActiveElement()
        .getAttribute('id')
        .then(function(id) {
          expect(id).to.equal('readonly-dropdown-shdo');
        })
        .end();
},

测试在.findById('dropdown-list')处失败,因为Selenium正在抛出“NoSuchElement”异常,这是正确的,因为该元素不存在。问题是,就我所知,Intern的测试运行器会自动失败导致这些错误的测试,即使这种行为是预期的。

我的问题:是否有一种首选方式可以预期在特定时间页面上不应存在元素?

2 个答案:

答案 0 :(得分:1)

您可以尝试使用findDisplayedById()代替findById(),如下所示:

.findDisplayedById('dropdown-list')
        .then(...)
        .catch(...)
        .end()

答案 1 :(得分:-3)

不要检查那里应该是什么,检查那里应该是什么,即:你的伪元素。

(FWIW,我是你,我只是禁用下拉列表而不是交换元素。这样可以更容易测试并且在语义上仍然正确。禁用时下拉列表不会扩展。)