selenium webdriver无法拖放fullcalendar事件

时间:2014-03-04 19:02:40

标签: selenium-webdriver fullcalendar

我正在使用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

2 个答案:

答案 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()