が実行されるのを待たずに、何かを実行する前にdriver.wait()を使用して要素を待つと、間違って次のエラーが発生する要素:webdriver/node.js:Internet Explorer 11でエレメント
TypeError: Cannot read property 'length' of null
at C:\tools\node_modules\selenium-webdriver\lib\webdriver.js:909:22
at ManagedPromise.invokeCallback_ (C:\tools\node_modules\selenium-webdriver\lib\promise.js:1343:14)
at TaskQueue.execute_ (C:\tools\node_modules\selenium-webdriver\lib\promise.js:2868:14)
at TaskQueue.executeNext_ (C:\tools\node_modules\selenium-webdriver\lib\promise.js:2851:21)
at C:\tools\node_modules\selenium-webdriver\lib\promise.js:2730:27
at C:\tools\node_modules\selenium-webdriver\lib\promise.js:639:7
at process._tickCallback (node.js:369:9)
これは私がコールするコードスニペットです。 return driver.wait(
行で失敗しています。
function wait_for_element_and_click(element){
var target_element;
return driver.wait(
function() { return driver.isElementPresent(element) },
10000
)
.then(function(){ element.click() })
}
これは私がそれを呼び出す方法です。
function select_and_click_links(){
var make_field = "make_field_id";
var model_field = "model_field_id";
return driver.wait(webdriver.until.elementLocated(webdriver.By.id(make_field)))
.then(function() { wait_for_and_click_element(webdriver.By.id(model_field)) })
}
興味深いことに、私はそれが今までまったく同じことをやっているように思われた(直前の行で失敗していません(つまり、私が試してみました物事return driver.wait(webdriver.until.elementLocated(webdriver.By.id(make_field)))
)
:
*はfunction(){ return driver.isElementPresent(element) }
を交換しますオプションのタイムアウトを除くwebdriver.until.elementLocated(element)
*。* wait_and_click_element
コール(うん、ここではほとんど何をしようとして)の結果を返す。
シンとgs私は試していない:
*別のブラウザ(アプリケーションがIEで正しく動作するように - これはIEの奇妙な場合は、私たちのためのdealbreakerです)。
スクリプトは断続的に失敗します。