Proper way to limit wait time on selenium element search

隐身守侯 提交于 2019-12-11 12:41:20

问题


My nightwatch/selenium test code looks for elements in the page that may not exist using code such as

browser.elementIdElement(ELEMENT,'class name', 'myclass', function(r)
{   if (r.status == 0) console.log('found match')
    else               console.log('did not find match')
})

If the element is found, the callback is invoked quickly (< 50ms), but if no element matches, the callback takes much longer (>1000ms). I have to do this hundreds of times and there are only a few elements that match the search criteria, so it adds a significant amount of time to a test run.

I would like to limit the time selenium spends searching for elements. I tried using the selenium timeoutsImplicitWait() function, e.g.,

browser.timeoutsImplicitWait(250)
       .elementIdElement(ELEMENT,'class name', 'myclass', function(r)
{...})

but it doesn't affect performance. What is the correct method for limiting element search time?


回答1:


Perhaps I am misunderstanding your problem; both of these patterns works well for me:

client
.useXpath().waitForElementPresent(selector, this.timeout)
.useCss().waitForElementPresent(selector, this.timeout)

this.timeout is set in the prototype of the base test case.

util.inherits(MyExampleBaseClass, Base);

MyExampleBaseClass.prototype = {
  before: function (client) {
    // call super-before
    Base.prototype.before.call(this, client);
    this.timeout = 250;
  },

  after: function (client, callback) {
    // call super-after
    Base.prototype.after.call(this, client, callback);
  },

  // Note: This method will not be mistaken by nightwatch for a step because
  // it is not enumerable (since it's on the prototype)
  getSiteURL: function () {
    return "http://www.urlundertest.com/";
  }
};



回答2:


The following code for checking the visibility and continue even if there is no match

browser.waitForElementVisible('selector',timeout,false);

or this for the existence :

browser.waitForElementPresent('selector',timeout,false);

According to nightwatch api,

By the default if the element is not found the test will fail. Set this to false if you wish for the test to continue even if the assertion fails.To set this globally you can define a property abortOnAssertionFailure in your globals.

For more detailed explanation, check here: http://nightwatchjs.org/api/#waitForElementVisible



来源:https://stackoverflow.com/questions/35063756/proper-way-to-limit-wait-time-on-selenium-element-search

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!