我正在尝试使用python中的SeleniumWebDriver(在linux中使用Firefox)在网站上自动使用简单的HTML5应用程序。我需要我的Python程序单击HTML5画布上特定位置的按钮,然后在按下按钮后在画布上单击并拖动一个或两个对象。
似乎selenuim目前无法在HTML5画布上实际定位按钮或任何其他对象。首先,我试图找到HTML5按钮出现的页面上的坐标,计算出它与页面上selenium可以通过ID找到的对象的偏移量(以像素为单位),然后使用带有偏移量的move_to_element_,如下所示:
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脚本不会引发像上面那样的错误,或者其他方法来实现这一点?
您尝试使用javascript的方法是使用JQuery。这就是为什么如果您想使用它,您应该将jquery添加到您的页面中。
至于Selenium,它绑定到DOM,这就是为什么它找不到任何不存在的东西——正如您所知,canvas只是浏览器的一个图像。假设“canvas”变量中有canvas元素:
canvas = self.driver.find_element_by_id("canvas")
drawing = ActionChains(self.driver)\
.move_by_offset(-10, -15)\
.click(canvas)\
.release()
drawing.perform()
如果不起作用,则单击其他位置:)您可以尝试确定单击的坐标。
根据文档,move_to_element_by_offset
使用相对于元素左上角的偏移量,而不是从中间。因此,Python片段中的负y偏移表示Selenium正在移动到画布上方的位置。如果它仍然不起作用,也许更新selenium Python绑定会修复它。
这是一个非常简单的脚本,但我需要帮助。 当没有为键入的文本列出建议时,网络驱动程序会单击谷歌搜索按钮(例如 macintosh)。但是当建议出现时,我如何仍然让网络驱动程序点击谷歌搜索按钮。我的代码如下: } 但得到以下错误。请帮助 在端口3288上启动ChromeDriver 2.40.565498(ea082db3280dd6843ebfb08a625e3eb905c4f5ab)仅允许本地连接
我试图使用Selenium Webdriver python单击网站上的一个按钮,我看到该按钮高亮显示,但没有使用函数单击。 下面是我尝试单击的按钮的html代码 我正在尝试使用id单击按钮 我还尝试了xpath,得到了相同的结果
我正在使用SeleniumWebDriver进行网站测试。现在我想在SeleniumWebDriver中设置TestNG。怎么可能呢?testng有JAR文件吗?
当我完成自动化后,Chrome Web驱动程序仍在后台运行,是否可以自动关闭它,而无需通过任务管理器执行?
我用XPath写了一个单选按钮的代码,但在代码执行过程中没有点击单选按钮。 我的代码是: 请帮助如何按钮选择特定的单选按钮,选择后它移动到另一个单选按钮。 提前感谢。
实际上,我可以使用函数来完成。我从“HTML5画布-如何在图像背景上画一条线?”中得到的东西。但是我需要在不使用from函数的情况下绘制图像,如下所示: