2016-09-28 43 views
6

Próbuję napisać funkcję węzła, która loguje się na stronie internetowej i mam problem z jej uruchomieniem. Próbuję czekać na załadowanie strony przy użyciu funkcji isElementPresent, o której mowa w this post, ale wydaje się, że nie działa.TypeError: driver.isElementPresent nie jest funkcją

Oto co mam do tej pory:

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) 

Kiedy uruchomić funkcję chociaż komunikat o błędzie TypeError: driver.isElementPresent is not a function. Co się tutaj dzieje i czego mi brakuje?

Odpowiedz

14

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

Jeśli używasz Selenium 3, powinieneś spróbować użyć findElements zamiast do określenia elementu obecne lub nie, jak poniżej: -

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

Albo jeśli chcesz czekać do elementu pragnienie obecnej powinieneś spróbować użyć webdriver.until jak poniżej: -

const until = webdriver.until; 

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

, ale jak mogę zamienić ten kod na selen 3? 'driver.wait (function() { return driver.isElementPresent (By.css (" form-control ")); }, 10000);' – RFtests

1

Upewnij się, że wszystkie zależności, takie jak Selenium i sterownik przeglądarki, są zainstalowane i działają na bardzo minimalnym przykładzie.

Następnie można sprawdzić, jakie funkcje znajdują się w obiekcie sterownika za pomocą konsoli console() (util.inspect (sterownik));

Jeśli skonfigurowano zależności, być może interfejs API nieco się zmienił. Obecny przykład tutaj https://www.npmjs.com/package/selenium-webdriver używa until. Możesz najpierw spróbować czegoś bliżej tego przykładu.

+0

Mam zweryfikowane zależności zostały zainstalowane. Prawdopodobnie zmienił się interfejs API? Nie mogę znaleźć żadnego odniesienia w dokumentach, http://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/index.html. Czy można bezpiecznie powiedzieć, że ta funkcja nie jest już używana? – jmreicha

+0

Tak, myślę, że nie jest już używany. Może elementLocated z 'until' https://github.com/SeleniumHQ/selenium/blob/master/javascript/node/selenium-webdriver/lib/until.js –

+0

do czasu, aż zadziała, sort. Wygląda na to, że nie działa z przerwami, ale myślę, że problem ten nie dotyczy tego pytania. – jmreicha

Powiązane problemy