0

в Internet Explorer 11, я пытаюсь использовать driver.wait(), чтобы дождаться элемента, прежде чем что-то делать с ним, и я получаю следующую ошибку с перерывами, для разных элементы:webdriver/node.js: выполнение не будет ждать элемента

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 вызова (да, пытаясь почти все здесь).

Thin gs Я не пробовал:
* другой браузер (так как приложение работает правильно в IE - так что, если это IE quirk, это для нас разбойник).

Сценарий все еще не срабатывает с перерывами.

ответ

0

Вместо поиска попробуйте использовать isDisplayed, чтобы убедиться, что элемент виден на странице. webdriver.until.elementLocated может проверять только элемент в DOM.