2017-04-10 69 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'等。 –