我正在尝试使用python中的Selenium webdriver (在linux中使用Firefox )自动在网站上使用一个简单的HTML5应用程序。我需要我的Python程序单击位于HTML5画布上特定位置的按钮,然后在按下按钮后单击并在画布上拖动一个或两个对象。
似乎selenuim目前无法在HTML5画布上实际定位按钮或任何其他对象。首先,我尝试找到HTML5按钮出现的页面上的坐标,计算出它与selenium可以通过ID找到的页面上的对象的像素偏移量,然后使用move_to_element_with_offset
,如下所示:
from selenium.webdriver.common.action_chains import ActionChains
actions = ActionChains(driver)
move_to_element_with_offset(elem, 50, -250)
actions.click()
actions.perform()
这似乎不管用。它没有引发错误,但什么也没发生。我突然想到,我可能弄错了坐标,但我不知道如何查看页面上点击的实际位置,以便检查这一点。在各种论坛上,许多人似乎认为selenium中的单击操作无论如何都是不可靠的。接下来,我发现有人声称能够通过运行一个javascript来实现我想要做的事情,这个javascript可以模拟在页面上给定坐标的点上的点击。查看此处:http://chariotsolutions.com/blog/post/automated-testing-of-html5-canvas/
我对Python很在行,但对javascript几乎一无所知。我尝试了一些与本文非常相似的东西:
x = '675'
y = '450'
driver.execute_script("var evt = $.Event('click', { pageX: " + x +", pageY: " + y + " } );" + "$('#diagramCanvas').trigger(evt);")
这导致了一个错误:
WebDriverException: $.Event is not a function
如何让Python Selenium webdriver在给定坐标的情况下单击HTML5画布中的某个点?有没有一个javascript脚本可能不会引发类似上面的错误,或者有其他方法可以做到这一点?
发布于 2015-04-14 20:03:31
您尝试使用javascript的方法是使用JQuery。这就是为什么如果您想使用它,您应该将jquery添加到您的页面中。
至于Selenium,它绑定到DOM,这就是为什么它找不到任何不存在的东西的原因-正如您所知道的,canvas只是浏览器的一个图像。假设我们在" canvas“var中有canvas元素:
canvas = self.driver.find_element_by_id("canvas")
drawing = ActionChains(self.driver)\
.move_by_offset(-10, -15)\
.click(canvas)\
.release()
drawing.perform()
如果它不起作用,您正在单击其他位置:)您可以尝试确定您正在单击的坐标。
https://stackoverflow.com/questions/29624949
复制相似问题