over - selenium click python
Utilizar(Python) Webdriver para seleccionar texto sin usar un elemento(es decir, hacer clic y arrastrar para resaltar de un conjunto de coordenadas a otro conjunto) (2)
Estoy intentando seleccionar algo de texto (es decir, destacarlo con el cursor del mouse) para una prueba automatizada. Me gustaría usar Python y Webdriver para ir a esta url: http://en.wikipedia.org/wiki/WebDriver#Selenium_WebDriver y resaltar la segunda oración bajo el encabezado ''Selenium WebDriver'' ("Selenium WebDriver acepta comandos (enviados en Selenese, o a través de una API de cliente) y los envía a un navegador. ")
Lo complicado es que esperaba que esto se pudiera hacer sin usar ningún elemento, y he estado tratando de encontrar la forma de hacer clic en la ubicación especificada por las coordenadas xey y luego mantener el movimiento en otra ubicación, especificada por un conjunto diferente de coordenadas xey.
De leer todo, entiendo que no es posible hacer clic en un área de la página por coordenadas, ya que necesita especificar un elemento, por lo que la selección de texto se puede hacer solo con un solo elemento remoto (digamos ". mw-editsection> a ")? Estaba pensando que podría ser posible hacerlo utilizando el elemento como referencia y haciendo clic a cierta distancia de él (es decir, hacer clic por desplazamiento).
Esto es lo que he intentado hasta ahora, pero no está haciendo el trabajo:
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()
De esto, me sale este error:
WebDriverException: Message: u"''UnknownError: Cannot press more then one button or an already pressed button.'' when calling method: [wdIMouse::down]"
Fondo:
Aprecio que el ejemplo anterior sea un poco artificial, pero en realidad no puedo proporcionarle lo que realmente estoy tratando de probar. Lo que en realidad estoy haciendo es escribir una serie de pruebas en Python usando webdriver para probar nuestro visor de documentos, y realmente necesito poder resaltar una fila de texto, ya que así es como se agregan comentarios en nuestro sistema. Lamentablemente, el visor de documentos no muestra el documento enviado, solo una imagen de él a través de algún tipo de magia de JavaScript. La página del documento es un elemento, pero no hay elementos para que webdriver haga clic dentro de la página.
Debido a esto, quiero poder hacer clic y mantener presionada una ubicación de la página especificando las coordenadas (al comienzo de la oración), mantener presionado el botón del mouse mientras se simula el cursor del mouse moviéndolo hacia la derecha a un segundo conjunto de coordenadas (al final de la oración), y luego suelte el botón.
TL; DR:
¿Es posible hacer clic y arrastrar desde un punto arbitrario en una página web a otra, sin utilizar un elemento (que no sea para actuar como referencia desde la cual se define el punto arbitrario como desplazado)?
Si no, ¿qué otro método podría sugerir para resaltar un área de texto y podría proporcionar un ejemplo de trabajo?
¡Gracias!
¿Has probado con drag_and_drop_by_offset ?
actions.drag_and_drop_by_offset(element, 50, 50)
actions.perform()
Creo que lo he solucionado. Lo siguiente parece funcionar, ¡pero parece que no puedo dejarlo! Creo que esto podría deberse a una implementación incorrecta de .release () en los enlaces de Python para Webdriver:
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()