2016-09-28 20 views
6

Bir web sitesinde oturum açan ve çalışmaya başlamasında sorun yaşıyorum bir düğüm işlevi yazmaya çalışıyorum. Sayfayı this post başvurulan isElementPresent işlevini kullanarak yüklemek için beklemeye çalışıyorum, ancak çalışıyor gibi görünmüyor.TypeError: driver.isElementPresent bir işlev değil

İşte ben bugüne kadar ne var:

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) 

hatası TypeError: driver.isElementPresent is not a function elde etmedikleri ben işlevini çalıştırmak

. Neler oluyor burada ve neyi özlüyorum?

cevap

14

Eğer Selenium 3 kullanıyorsanız For consistency with the other Selenium language bindings, WebDriver#isElementPresent() and WebElement#isElementPresent() have been deprecated., sen mevcut veya olmasın aşağıda elemanı belirlemek için yerine findElements kullanmayı deneyin olmalıdır: -

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

Yoksa arzu eleman günümüze kadar beklemek istiyorsanız, Eğer aşağıda webdriver.until kullanarak denemelisiniz: -

const until = webdriver.until; 

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

fakat bu kodumu selenyum 3 için nasıl değiştirebilirim? 'driver.wait (fonksiyonu() { dönüş driver.isElementPresent (By.css ("form-kontrol eder.")); }, 10000); ' – RFtests

1

Selenium ve tarayıcı sürücüsü gibi tüm bağımlılıkların yüklü olduğundan ve çok az örnek kullanarak çalıştığından emin olun.

Ardından, sürücü nesnesinde hangi işlevlerin, console.log (util.inspect (driver)) ile olduğunu kontrol edebilirsiniz;

Bağımlılıklarınız kuruluysa, API biraz değişmiş olabilir. Mevcut örnek https://www.npmjs.com/package/selenium-webdriver, until kullanır. Önce bu örneğe daha yakın bir şey denemek isteyebilirsiniz.

+0

Doğruladım bağımlılıkları kuruldu. Muhtemelen API değişti mi? Dokümanlar, http://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/index.html adreslerinde herhangi bir referans göremiyorum. Bu fonksiyonun artık kullanılmadığını söylemek güvenli mi? – jmreicha

+0

Evet, sanırım artık kullanılmıyor. Belki elemanlar, "olana kadar" https://github.com/SeleniumHQ/selenium/blob/master/javascript/node/selenium-webdriver/lib/until.js –

+0

çalışana kadar. Zaman zaman başarısız gibi görünüyor ama bence sorun bu sorunun dışında. – jmreicha