Selenium Python 等待动画元素停止

Selenium Python wait for animated element to stop

我将 Selenium 与 Python 一起使用,但我还没有弄清楚如何等待在页面上移动的动画元素停止后再单击它。例如:

然后下一段代码指向一个页面,当单击按钮 'Aanmeleden' 时,会出现一个包含用户名和密码的输入框。但是,有一个小动画将 window 从顶部拖动。

不出所料,下一个代码不起作用

from selenium import webdriver

driver = webdriver.Chrome(driverFile)
driver.get('http://www.collectandgo.be/cogo/nl/home')
driver.find_element_by_link_text("Aanmelden").click()
driver.find_element_by_name("viewLogonid").send_keys('myUser')

下一个代码也不行

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import selenium.webdriver.support.ui as ui

wait = ui.WebDriverWait(driver, 10)
driver = webdriver.Chrome(driverFile)
driver.get('http://www.collectandgo.be/cogo/nl/home')
driver.find_element_by_link_text("Aanmelden").click()
wait.until(EC.element_to_be_clickable((By.NAME, 'viewLogonid'))).send_keys('myUser')

特别是最后一段代码给出了下一个错误:

selenium.common.exceptions.WebDriverException: Message: u'unknown error: Element is not clickable at point (690, 65). Other element would receive the click: <div class="modal-backdrop fade in" style="height: 810px;"></div>\n  (Session info: chrome=34.0.1847.116)\n  (Driver info: chromedriver=2.9.248304,platform=Linux 3.5.0-36-generic x86_64)' 

我查看了 Selenium py docs 中的文档,但没有找到任何好的解决方法。

您应该可以使用 JavaScript 和 jQuery 来执行此操作。例如:

def wait_for_animation(self, selector):
      is_animation_in_progress = self.is_element_animated(selector)
      while is_animation_in_progress is True:
          sleep(.5)
          is_animation_in_progress = self.is_element_animated(selector)

  def is_element_animated(self, selector):
      return self._driver.execute_script("return jQuery('" + selector + "').is(':animated');")

这假设您可以使用标准 jQuery 选择器访问您需要的元素,例如 'div:contains(Aanmelden)'