Ich bin neu bei Selenium und ich glaube, ich verstehe einfach nicht, was im Code und im Browser passiert. Ich kann mein Problem umgehen, indem ich den Treiber (siehe unten) durch einen Treiber ersetzen. Erhalte einen Code mit der Nummer driver.sleep(1000)
, aber ich habe gelesen, dass Schlafanweisungen nicht ideal sind.WebdriverJS ElementNotVisibleError: Element nicht sichtbar
Kann mir jemand helfen herauszufinden, warum der Code, den ich habe, nicht funktioniert und was genau vor sich geht? Wenn es hilfreich ist, kann ich einen vollständigen Stack-Trace bereitstellen.
Hier ist, wie der Code aussieht.
const webdriver = require('selenium-webdriver')
const chrome = require("selenium-webdriver/chrome");
const By = webdriver.By
const until = webdriver.until
var username = "XXX"
var password = "XXX"
function login(username, password) {
// This part works fine
driver.wait(until.elementLocated(By.id('Email')))
driver.findElement(By.id('Email')).sendKeys(username)
driver.findElement(By.id('next')).click()
// Here is where the element not visible happens
driver.wait(until.elementLocated(By.id('Passwd')), 5000)
// driver.sleep(1000) works but I'm not sure why?
driver.findElement(By.id('Passwd')).sendKeys(password)
// Login
driver.findElement(By.id('signIn')).click()
}
var driver = new webdriver.Builder()
.withCapabilities({'browserName': 'chrome'}).build()
driver.get('https://gmail.com')
login(username, password)
Update:
Per Vorschlag, habe ich versucht, die elementIsVisible
Funktion zu warten, bis das Element sichtbar zu werden, über den folgenden Code.
driver.wait(until.elementIsVisible(driver.findElement(By.id('Passwd')), 5000))
Aber ich bekomme den folgenden Fehler.
NoSuchElementError: no such element: Unable to locate element: {"method":"css selector","selector":"*[id="Passwd"]"}
'.isEnabled()' in der Regel gilt nur für 'BUTTON' Tags sind deaktiviert/aktiviert. Sie können versuchen, darauf zu warten, dass es sichtbar oder anklickbar ist. – JeffC
Oh ... und noch ein Kommentar. Sie möchten, dass Funktionen nur eine einzige Sache machen ... in diesem Fall würde ich 'googeLogin()' ändern, um nur 'login()' zu sein und den Teil herausnehmen, wo Sie den Treiber einrichten und zu google navigieren. Habe es nur mit dem Login-Teil zu tun. – JeffC
@JeffC Ich räumte den Code ein wenig auf. Ich habe die 'isEnabled()' Funktion entfernt, sehe aber immer noch die 'element not visible' Fehler. – jmreicha