TheIntern.io/Selenium elementByCssSelector仅工作一次

时间:2013-12-16 23:15:05

标签: javascript testing selenium

我有一个奇怪的问题,当我通过Selenium(使用Intern.io框架)运行功能测试时,只识别第一个元素;返回错误后,我尝试访问的任何元素:

Error: Error response status: 7

我知道这个回复可以解决:

{summary:'NoSuchElement',
detail:'An element could not be located on the page using the given search parameters.'}

这个错误很令人沮丧,因为我知道该元素绝对可用。

这是我的简单功能测试失败:

define([
  'intern!object',
  'intern/chai!assert',
  'require'
  ], function (registerSuite, assert, require) {
    registerSuite({
      name: 'search',

      'geocode search test': function () {
        return this.remote
        .get('http://localhost:8181')
        .elementByCssSelector('.modal-close').clickElement()
        .elementByCssSelector('#location_search_field').clickElement().type('San Francisco, CA')
      }
    });
});

测试将找到.modal-close元素并适当地单击它,但是,它会在尝试查找#location_search_field元素时返回错误(抛出上面提到的错误)。

如果我注释掉.elementByCssSelector('.modal-close').clickElement()行,那么selenium找不到位置输入字段并用提供的字符串填充它就没有问题。

我也尝试了elementById('location_search_field')方法。

如果你想知道我的环境数组,那么这里有一个副本:

environments: [
    { 
      browserName: 'firefox',
      platform: 'MAC',
      cssSelectorsEnabled: true,
      javascriptEnabled: true,
      applicationCacheEnabled: true,
      webStorageEnabled: true
    }
  ]

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

以为自从我弄明白以后我就会发布答案。我已经了解到,只要我在每次浏览器操作后添加.end(),测试就会继续按照我的预期运行。

以下是我的示例中的更新代码:

define([
  'intern!object',
  'intern/chai!assert',
  'require'
  ], function (registerSuite, assert, require) {
    registerSuite({
      name: 'search',

      'geocode search test': function () {
        return this.remote
          .get('http://localhost:8181')
            .elementByCssSelector('.modal-close').clickElement()
              .end()
            .elementByCssSelector('#location_search_field').clickElement().type('San Francisco, CA')
      }
    });
});