Есть выпадающая форма с выбором статусов. После клика что бы форма открылась если в этой форме нету курсора она срывается через пару секунд. Селениум почемуто не может выбрать статус. Как можно заставить селениум перевести курсор в эту форму?
Вчера как раз столкнулся с такой проблемой
На питоне примерно так
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
webdriver = webdriver.Firefox()
webdriver.get('http://some_url')
element_to_hover_over = firefox.find_element_by_id("id")
hover = ActionChains(driver).move_to_element(element_to_hover_over)
hover.perform()
В конце обязательно добавляем hover.perform(), или эффекта не получим
Спасибо на руби выглядит так
status1 = driver.find_element(:css, "..............")
driver.action.move_to(status1).click.perform
Подскажите, пожалуйста, решение.
У меня похожая форма, открывающаяся при наведении курсора мыши на элемент. Однако,
element_to_hover_over = firefox.find_element_by_id("id")
отсутствует в коде страницы до наведения курсора на этот элемент.
Возможно ли сделать так, чтобы курсор не просто наводился на этот элемент, а удерживался на нём до того момента, пока мне не захочется его оттуда убрать? В этой всплывающей форме у меня, кроме ссылок, есть еще другие элементы, к которым я не могу обратиться, если курсор не помещен на эту форму, например текстовое поле и кнопка.
Вцелом вопрос такой: как реализовать не просто наведение, а наведение и удержание курсора на элементе?
Спасибо!
натыкался на такую конструкцию много раз, когда искал в интернете.
кто-нибудь может подсказать, как это реализовать на Python?
натыкался на такую конструкцию много раз, когда искал в интернете.
кто-нибудь может подсказать, как это реализовать на Python?
на Java есть у меня работающее варианты, питон увы не знаю)
сдесь есть парни по Питну специ, может отпишуться) ждите
какой код надо написать на python?
впрочем логика довольно просто и очень похожа на java
нужно использовать selenium.webdriver.common.action_chains.ActionChains
например
def testDoubleClick(self): toDoubleClick = self.driver.find_element_by_id("doubleClickField") dblClick = ActionChains(self.driver).double_click(toDoubleClick) dblClick.perform() self.assertEqual("DoubleClicked", toDoubleClick.get_attribute('value'))
вот Вам и пример хороший, советую поэксперементировать просто с вызовом очередностей функций после клика, задержки итд, так как оно чуток странно работает, но все работает, когда отдебагать
Отпишусь по результатам эксперементов :)
def testDoubleClick(self): toDoubleClick = self.driver.find_element_by_id("doubleClickField") dblClick = ActionChains(self.driver).double_click(toDoubleClick) dblClick.perform() self.assertEqual("DoubleClicked", toDoubleClick.get_attribute('value'))
а что если между
dblClick = ActionChains(self.driver).double_click(toDoubleClick)
и
dblClick.perform()
нужно определить еще один элемент типа "find_element_by_"?
только в моем случае это не дабл клик, а move_to_element, и всплывающая форма, появляющаяся после наведения на первый элемент, пропадает при определении нового элемента :(
вот еще один пример, я думаю, тут станет полностью понятно
def performDragAndDropWithMouse(self):
dragReporter = self.driver.find_element_by_id("dragging_reports")
toDrag = self.driver.find_element_by_id("rightitem-3")
dragInto = self.driver.find_element_by_id("sortable1")
holdItem = ActionChains(self.driver).click_and_hold(toDrag)
moveToSpecificItem = ActionChains(self.driver) \
.move_to_element(self.driver.find_element_by_id("leftitem-4"))
moveToOtherList = ActionChains(self.driver).move_to_element(dragInto)
drop = ActionChains(self.driver).release(dragInto)
self.assertEqual("Nothing happened.", dragReporter.text)
holdItem.perform()
moveToSpecificItem.perform()
moveToOtherList.perform()
self.assertEqual("Nothing happened. DragOut", dragReporter.text)
drop.perform()
Сегодня вот только боролся с аналогичным списком, перепробовал несколько вариантов, но стабильный результат получил только таким вот способом:
public void clickSubMenu(WebElement element, final By locator){
//двигаем mouse на элемент, при наведении на который выпадает скрытый список
Locatable hoverItem = (Locatable) element;
Mouse mouse = ((HasInputDevices) driver).getMouse();
mouse.mouseMove(hoverItem.getCoordinates());
//пришлось добавить серию перемещений mouse в пределах выпавшего списка чтобы скрытый элемент списка можно было найти в DOM
mouse.mouseMove(hoverItem.getCoordinates(),5,15);
mouse.mouseMove(hoverItem.getCoordinates(),1,1);
mouse.mouseMove(hoverItem.getCoordinates(),5,15);
mouse.mouseMove(hoverItem.getCoordinates(),1,1);
//теперь находим элемент списка, который нам нужно кликнуть
Locatable actionItem = (Locatable) driver.findElement(locator);
mouse.mouseMove(actionItem.getCoordinates());//кликаем
mouse.click(null);
}