我正在使用Selenium和Python,我还没有弄清楚如何等待在页面上移动的动画元素在点击它之前停止。例如:
然后,下一段代码会显示一个页面,当点击按钮时,Aanmeleden'出现带有用户名和密码的输入框。但是,有一个小动画从顶部拖动窗口。
正如预期的那样,下一个代码不起作用
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中的文档,但我没有找到任何好的解决方法。
答案 0 :(得分:2)
你应该可以使用JavaScript&amp; 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选择器访问所需的元素,例如&#39; div:contains(Aanmelden)&#39;