2017-04-10 73 views
0

我越来越:如何等待元素在CUCUBER JS中可见?

NoSuchElementError: no such element: Unable to locate element 

我等待功能不候的。一旦到达该步骤,它就会失败而无需等待设定的等待时间。

在我world.js我定义我的驱动

var driver = buildChromeDriver(); 
    ... 
    var World = function World() { 
    ... 
    this.driver = driver; 
} 

这是我的步骤:

this.Then(/^xxxxx$/, function() { 
    this.driver.wait(function() { 
     return this.driver.findElement({ xpath: props.woocomerceSelectors.viewCart }).isDisplayed(); 
    }, 4000);}); 

回答

1

等待将遍历到非假答案是内环路返回。

你的代码目前正在做什么是返回一个待定的承诺,这不是错误的,因此不会循环。

如果你从这个承诺中获得东西,并返回它是否等于真,那么你应该有更多的运气。

this.Then(/^xxxxx$/, function() { 
    this.driver.wait(function() { 
     return this.driver.findElement({xpath: props.woocomerceSelectors.viewCart}).isDisplayed() 
      .then(function (isDisplayed) { 
       return isDisplayed == true; 
      }); 
    }, 4000); 
}); 

我希望这会有所帮助。

+0

只是一件事。也许我做错了,但我得到一个错误:TypeError:无法读取(this.driver)未定义的属性'findElement'你认为我做错了什么? – johnnyshrewd

+0

这样做的一个快速方法是使用全局函数。 'global.getDriver = function(){return driver; }'world.js文件应该意味着在你的步骤定义文件中你可以有'var driver = getDriver()',然后你将不再需要使用'this.driver',你只需要做'driver.wait','driver.findElement'等。 –