我正在使用selenium webdriver(python)来自动测试使用fullcalendar js插件库的应用程序。但是,我无法自动将事件拖放到日历中。
经过大量的实验,我可以看到下面的测试代码将事件元素移动到正确的位置。当您在浏览器上手动完成此操作时,您正在悬停的日历方块变为蓝色,并且该事件在被删除时会添加到日历中。通过自动化移动事件时不会发生这种情况 - 日历方块不会变为蓝色,并且事件在被删除时会返回其原始位置。
如何在自动化下获得相同的拖放功能?
evt = self.sel.find_element_by_css_selector('#evt1')
cal_square = self.sel.find_element_by_css_selector('td[data-date=\'%s\']' % move_to_date.isoformat())
ActionChains(self.sel).click_and_hold(evt).move_to_element(cal_square).perform()
time.sleep(10)
ActionChains(self.sel).release().perform()
time.sleep(5)
以下是测试用例的链接,演示了此问题: https://gist.github.com/jenniferlianne/9353489
答案 0 :(得分:0)
拖放时我的时间有问题。我需要在move_to_element和release之后等待一段时间,但是在move_to_element.perform之后我的鼠标到达拖动元素的坐标并在那里释放。我该怎么办?
过了一会儿我试试这个:
parent = driver.find_element_by_xpath("//*[contains(text(), 'Parent')]")
welcome_form = driver.find_element_by_id(link.my_forms["welcome_to_pdf_form"])
actions.click_and_hold(welcome_form).move_to_element(parent).click().perform()
我实际上并不知道它为什么会起作用。我认为点击后会产生点击,我会收到错误但工作正常。
答案 1 :(得分:0)
我的问题是 - 正如Micheal指出的那样 - 在移动之后,鼠标恢复到原始元素位置并在那里进行释放()。您可以使用您想要“鼠标移动”的元素提供release()函数。
无论出于何种原因,这都有效:
ActionChains(self.sel).click_and_hold(
evt).move_to_element(cal_square).release(cal_square).perform()
虽然这不是:
ActionChains(self.sel).drag_and_drop(evt, cal_square).perform()