Monday, May 20, 2024
-5
rated 0 times [  2] [ 7]  / answers: 1 / hits: 40049  / 11 Years ago, sun, june 2, 2013, 12:00:00

I am using the selenium-webdriverjs. I want to wait for a certain element to be displayed for which I have created an explicit wait as follows and it works just fine,



var displayed = false;
driver.wait(function(){
driver.findElement(locator).isDisplayed().then(function(value){
displayed = value;
});
return displayed;
}, timeout);


Is this the best I can do or is there a better way to do this? The reason I ask is that the first time ever the wait callback is called (in my case) it will always return false. Only subsequently when the isDisplayed promise is executed will the value of displayed change.


More From » selenium-webdriver

 Answers
86

Your code is mixing a synchronous return with asynchronous callbacks, the following code should do the right thing:



return driver.wait(function() {
return driver.findElement(locator).isDisplayed();
}, timeout);


The inner function will return a promise that driver.wait will wait for and will take its value (true/false) as the waiting condition.


[#77868] Friday, May 31, 2013, 11 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
lara

Total Points: 462
Total Questions: 100
Total Answers: 102

Location: Jersey
Member since Mon, Jun 14, 2021
3 Years ago
lara questions
;