2016-09-28 12 views
6

Я пытаюсь написать функцию узла, которая входит в систему, и у меня возникают проблемы с ее работой. Я пытаюсь дождаться загрузки страницы с помощью функции isElementPresent, указанной в this post, но она, похоже, не работает.ТипError: driver.isElementPresent не является функцией

Вот что я до сих пор:

const webdriver = require('selenium-webdriver') 
const By = webdriver.By 

var username = '' 
var password = '' 
var timeout = 5000 

function FacebookLogin(username, password) { 

    var driver = new webdriver.Builder() 
     .withCapabilities(webdriver.Capabilities.chrome()) 
     .build() 

    driver.get('http://www.facebook.com') 

    driver.wait(function() { 
     return driver.isElementPresent(By.id('email')) 
    }, timeout) 

    var user = driver.findElement(By.id('email')) 
    user.sendKeys(username) 

    var pass = driver.findElement(By.id('pass')) 
    pass.sendKeys(password) 

    pass.submit() 
    driver.sleep(5000) 
    driver.quit() 
} 

FacebookLogin(username, password) 

Когда я запускаю функцию, хотя я получаю ошибку TypeError: driver.isElementPresent is not a function. Что здесь происходит и чего мне не хватает?

ответ

14

For consistency with the other Selenium language bindings, WebDriver#isElementPresent() and WebElement#isElementPresent() have been deprecated.

Если вы используете Selenium 3, вы должны попробовать использовать findElements вместо того, чтобы определить элемент присутствует или нет, как показано ниже: -

driver.findElements(By.id('email')).then(found => !!found.length); 

Или, если вы хотите, чтобы ждать, пока желание элемента настоящее время, вы должны попытаться использовать webdriver.until, как показано ниже: -

const until = webdriver.until; 

var user = driver.wait(until.elementLocated(By.id('email')), timeout); 
user.sendKeys(username); 
+0

но как я могу заменить этот код для селена 3? 'driver.wait (функция() { возврата driver.isElementPresent (By.css ("форма контроля.")); }, 10000);' – RFtests

1

Убедитесь, что все зависимости, такие как Selenium и драйвер браузера, установлены и работают с минимальным примером.

Затем вы можете проверить, какие функции находятся в объекте драйвера с помощью console.log (util.inspect (driver));

Если ваши зависимости настроены, возможно, API слегка изменился. В данном примере здесь https://www.npmjs.com/package/selenium-webdriver использует until. Сначала вы можете попробовать что-то ближе к этому примеру.

+0

У меня проверены зависимости, которые были установлены. Вероятно, API изменился? Я не могу найти ссылки в документах, http://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/index.html. Безопасно сказать, что эта функция больше не используется? – jmreicha

+0

Да, я думаю, что он больше не используется. Может быть, elementLocated от 'до' https://github.com/SeleniumHQ/selenium/blob/master/javascript/node/selenium-webdriver/lib/until.js –

+0

до тех пор, пока не будет работать, вроде. Кажется, что это прерывается с перерывами, но я думаю, что этот вопрос выходит за рамки этого вопроса. – jmreicha