2016-03-21 3 views
1

У меня есть код нижепитон ошибка селеном selenium.common.exceptions.StaleElementReferenceException

from selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait 

driver = webdriver.Firefox() 

driver.get("https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa") 
username = WebDriverWait(driver, 20).until(lambda driver : driver.find_element_by_id('appleId')) 
password = WebDriverWait(driver, 20).until(lambda driver : driver.find_element_by_id('pwd')) 

username.send_keys("xxxxxxxxxx.com") 
password.send_keys("xxxxxxxx") 

password.submit() 

Но я получил ошибку ниже

password.submit() 
File "/Users/.virtualenvs/itunes/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py", line 84, in submit 
    self._execute(Command.SUBMIT_ELEMENT) 
    File "/Users/.virtualenvs/itunes/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py", line 457, in _execute 
    return self._parent.execute(command, params) 
    File "/Users/.virtualenvs/itunes/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 233, in execute 
    self.error_handler.check_response(response) 
    File "/Users/.virtualenvs/itunes/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 194, in check_response 
    raise exception_class(message, screen, stacktrace) 
selenium.common.exceptions.StaleElementReferenceException: Message: Element not found in the cache - perhaps the page has changed since it was looked up 
Stacktrace: 
    at fxdriver.cache.getElementAt (resource://fxdriver/modules/web-element-cache.js:9454) 
    at Utils.getElementAt (file:///var/folders/x1/1bwt313j0qvgdh5pfzpbpvcw0000gn/T/tmpR5A61x/extensions/[email protected]/components/command-processor.js:9039) 
    at WebElement.submitElement (file:///var/folders/x1/1bwt313j0qvgdh5pfzpbpvcw0000gn/T/tmpR5A61x/extensions/[email protected]/components/command-processor.js:12156) 
    at DelayedCommand.prototype.executeInternal_/h (file:///var/folders/x1/1bwt313j0qvgdh5pfzpbpvcw0000gn/T/tmpR5A61x/extensions/[email protected]/components/command-processor.js:12661) 
    at fxdriver.Timer.prototype.setTimeout/<.notify (file:///var/folders/x1/1bwt313j0qvgdh5pfzpbpvcw0000gn/T/tmpR5A61x/extensions/[email protected]/components/command-processor.js:625) 

Любые идеи, что случилось?

ответ

2

DOM отображается при вводе пароля. Вы должны переместить его

password = WebDriverWait(driver, 20).until(lambda driver : driver.find_element_by_class_name('dots')) # class dots is added in the rendering 
password.submit() 
0

Иногда бывает, что при выполнении какой-либо операции над элементом изменяется какой-либо его атрибут, такой как класс, значение и т. Д., И вы не можете получить к нему доступ дальше.

Самый простой способ решить это определить этот элемент снова и использовать его, например:

pass = WebDriverWait(driver, 20).until(lambda driver : driver.find_element_by_id('pwd')) 
pass.submit(); 

Пример: Перейти к бревну apple.com В странице, когда вы проверяете поле пароля. вы обнаружите, что это изменения класса от password до password focused, когда вы нажимаете на поле и на password focused edited, когда вы набираете его.

Смежные вопросы