Python Selenium exceptions - Element input is not reachable by keyboard
Dobrý den, na serveru s CentOS 7 používám na testování dlouhodobě Python + Selenium + webdriver gecko na Firefox. Doteď jsem měl vyjímku, aby se nedělal update Firefoxu. Dnes jsem však update udělal a od té doby mně python selenium skript na přihlášení na jedny webové stránky začal hlásit chybu:
Na skript jsem několik měsíců nesahal a fungoval bezchybně. Problémová část se týká volby inputu pro vyplnění hesla - provede vyčištění inputu (clear) a poslání proměnné s heslem (send_keys(pass)):
Element se volí dle xpath a to je v pořádku.
Tak jsem tu chybu "Element input is not reachable by keyboard" nakonec vyřešil trochu oklikou, popíšu to celé včetně upgrade/update selenium+webdriver gecko.
Postupoval jsem takto:
#upgrade selenium
#upgrade webdriver
- stáhnout z https://github.com/mozilla/geckodriver/releases
mv: overwrite ‘/usr/bin/geckodriver’?
------------------------------------------------
A teď to nejhlavnější, co řeší chybu Element input is not reachable by keyboard:
#původní kód
#opraven takto:
Což však v mém případě způsobilo další chybu, kterou je:
To v krátkosti znamená, že poté co se klikne na passFieldElement.click(), tak stránka či část stránky se reloadne a element už nelze najít.
#řešení je znovu element najít a pak s ním provádět další operace
Tradááá a problémy jsou vyřešeny a skript je úspěšně dokončen.
selenium.common.exceptions.ElementNotInteractableException: Message: Element < input id="password_input" class="ui-inputfield" name="password_input" type="password"> is not reachable by keyboard
Na skript jsem několik měsíců nesahal a fungoval bezchybně. Problémová část se týká volby inputu pro vyplnění hesla - provede vyčištění inputu (clear) a poslání proměnné s heslem (send_keys(pass)):
passFieldElement.clear
passFieldElement.send_keys(pass)
Element se volí dle xpath a to je v pořádku.
ODPOVĚĎ
Tak jsem tu chybu "Element input is not reachable by keyboard" nakonec vyřešil trochu oklikou, popíšu to celé včetně upgrade/update selenium+webdriver gecko.
Postupoval jsem takto:
#upgrade selenium
pip3 install --upgrade selenium
#upgrade webdriver
- stáhnout z https://github.com/mozilla/geckodriver/releases
tar xzf geckodriver-v0.25.0-linux64.tar.gz
mv geckodriver /usr/bin/
mv: overwrite ‘/usr/bin/geckodriver’?
y
------------------------------------------------
A teď to nejhlavnější, co řeší chybu Element input is not reachable by keyboard:
#původní kód
passFieldElement.clear
passFieldElement.send_keys(pass)
#opraven takto:
passFieldElement.click()
passFieldElement.clear
passFieldElement.send_keys(pass)
Což však v mém případě způsobilo další chybu, kterou je:
selenium.common.exceptions.StaleElementReferenceException: Message: The element reference of < input id="password_input" class="ui-inputfield" name="password_input" type="password"> is stale; either the element is no longer attached to the DOM, it is not in the current frame context, or the document has been refreshed
To v krátkosti znamená, že poté co se klikne na passFieldElement.click(), tak stránka či část stránky se reloadne a element už nelze najít.
#řešení je znovu element najít a pak s ním provádět další operace
passFieldElement = WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_xpath(passFieldID))
#passFieldElement.clear
passFieldElement.send_keys(pass)
Tradááá a problémy jsou vyřešeny a skript je úspěšně dokončen.