使用(Python)Webdriver在不使用元素的情况下选择文本(即,单击并拖动以高亮显示从一组坐标到另一组坐标)

使用(Python)Webdriver在不使用元素的情况下选择文本(即,单击并拖动以高亮显示从一组坐标到另一组坐标),python,selenium,webdriver,mouseevent,highlight,Python,Selenium,Webdriver,Mouseevent,Highlight,我试图选择一些文本(即用鼠标光标突出显示)进行自动测试。我想使用Python和webdriver转到这个url:并突出显示标题“Selenium webdriver”下的第二句话(“Selenium webdriver接受命令(以Selenese或通过客户端API发送)并将其发送到浏览器。”) 棘手的是,我希望这可以在不使用任何元素的情况下完成,我一直在尝试找到一种方法,在x和y坐标指定的位置单击,然后保持移动到另一个位置,由不同的x和y坐标集指定 通过阅读,我了解到不可能只按坐标单击页面的某个

我试图选择一些文本(即用鼠标光标突出显示)进行自动测试。我想使用Python和webdriver转到这个url:并突出显示标题“Selenium webdriver”下的第二句话(“Selenium webdriver接受命令(以Selenese或通过客户端API发送)并将其发送到浏览器。”)

棘手的是,我希望这可以在不使用任何元素的情况下完成,我一直在尝试找到一种方法,在x和y坐标指定的位置单击,然后保持移动到另一个位置,由不同的x和y坐标集指定

通过阅读,我了解到不可能只按坐标单击页面的某个区域,因为您需要指定一个元素,因此可以仅使用单个远程元素(比如“.mw editsection>a”)来完成文本选择吗?我在想,通过使用元素作为参考并单击离它一定距离的位置(即按偏移量单击),可能可以做到这一点

这是我迄今为止所尝试的,但它不起作用:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Firefox()
actions = ActionChains(driver)
driver.get("http://en.wikipedia.org/wiki/WebDriver#Selenium_WebDriver")

the_only_element = ".mw-editsection>a"
element = driver.find_element_by_css_selector(the_only_element)

actions.move_to_element_with_offset(element,50,50)
actions.click_and_hold(on_element=None)
actions.move_by_offset(50, 50)
actions.release()
actions.perform()
由此,我得到以下错误:

WebDriverException: Message: u"'UnknownError: Cannot press more then one button or an already pressed button.' when calling method: [wdIMouse::down]" 
背景: 我很欣赏上面的例子有点做作,但是我不能提供给你我真正想要测试的东西。实际上,我正在用Python编写一系列测试,使用webdriver测试我们的文档查看器,我真的需要能够突出显示一行文本,因为这就是如何在我们的系统上添加注释。不幸的是,文档查看器实际上并不显示提交的文档,而是通过某种javascript向导显示它的一个图像。文档页面是一个元素,但是在页面本身中没有webdriver可以单击的元素

因此,我希望能够通过指定坐标(在句子开头)在页面上单击并按住某个位置,在模拟鼠标光标向右移动到第二组坐标(在句子结尾)时按住鼠标按钮,然后松开按钮

TL;博士: 是否可以在不使用元素的情况下从网页上的任意点单击并拖动到另一个点(将任意点定义为偏移的引用除外)

如果没有,您可以建议采用什么其他方法突出显示文本区域,并提供一个工作示例


谢谢

你试过使用

actions.drag_and_drop_by_offset(element, 50, 50)
actions.perform()

我想我已经解决了——下面的方法似乎确实有效,但我似乎无法让它放手!我认为这可能是由于用于Webdriver的Python绑定中.release()的错误实现造成的:

def click_and_drag(locator, x_from, y_from, x_to, y_to):
    element = driver.find_element_by_css_selector(locator)
    actions.move_to_element(element)
    actions.move_by_offset(x_from, y_from)
    actions.click_and_hold(on_element=None)
    actions.move_by_offset(x_to, y_to)
    actions.release(on_element=None)
    actions.perform()

指定“放置”位置的坐标,但不指定初始位置的坐标。我需要的更像是:操作。从\u offset\u到\u offset(元素,50,50,200,200)拖放