Intern Selenium测试的default_wait_time

时间:2014-09-24 05:53:55

标签: node.js selenium-webdriver requirejs selenium-chromedriver intern

实习生是否有相当于Capybara(RoR)的default_wait_time?

setPageLoadTimeout和setFindTimeout似乎没有完成任何事情。

this.timeout = 60000似乎给整个测试60秒,但我希望所有步骤都有默认的等待时间。否则,感觉步骤乱序,因为步骤依赖的元素尚未出现在页面上。

        var title = 'title ' + (new Date()).toString();
        var remote = this.remote;
        return remote
            .get(require.toUrl('http://' + Configs.host + '/logout'))
            .get(require.toUrl('http://' + Configs.host + '/auth/facebook'))
            .findById('email')
                .click()
                .type(Configs.fb.username)
                .end()
            .findById('pass')
                .click()
                .type(Configs.fb.password)
                .end()
            .findByCssSelector('#login_form input[type=submit]')
                .click()
                .end()
            // browser successfully navigates to "/things"
            .findByCssSelector('a.new_thing')
                .click()
                .end()
        // browser often navigates to "/things/new"
            .findByCssSelector('input.title')
        // terminal message always 'StaleElementReference'
        // even though a pollUntil (ommitted) does find 'input.title'
                .click()
                .type(title)
                .end()
            .findByCssSelector('button.create')
                .click()
                .end()

是否有其他人可靠地将此框架用于单页网页应用程序?

1 个答案:

答案 0 :(得分:0)

setFindTimeout设置远程服务器在超时之前尝试查找元素时等待元素出现的时间。如果不保证元素立即存在于页面上,那么您应该在加载页面后调用setFindTimeout

return this.remote.get('http://example.com')
  .setFindTimeout(5000)
  .findById('email')
    .click()
    .type(Configs.fb.username)
    .end()
  .findById('pass')
    .click()
    .type(Configs.fb.password)
    .end()
  // ...

请注意,某些Selenium服务器会在加载新页面后重置等待超时,因此您可能需要在加载新页面时再次调用它。