t.me/atinfo_chat Telegram группа по автоматизации тестирования

Mouseover c WebDriver


(alexey.bolonskiy) #1

На странице есть скрытое меню, которое становится видимым при наведении курсора на определённую область.

<div class="blockSubmenuWrapper">
    <a class="commonAction">admin</a>
    <div class="blockSubmenu">
        <ul class="menu-items">
            <li><a>...</a>
            <li><a>...</a>
            <li><a>...</a>
            <li class="last"><a>...</a>
        </ul>
    </div>
</div>

При наведении курсора на <div class="blockSubmenuWrapper"> меню становится видимым. Задача: делать клики по элементам <a>, которые находятся в скрытом меню. Для этого я использую

WebElement menu = driver.findElement(By.xpath("//a[@class='blockSubmenuWrapper']"));

WebElement myLink = driver.findElement(By.xpath("..."));

Actions builder = new Actions(driver);

builder.moveToElement(menu).build().perform();

myLink.click();

Это нормально отрабатывает для всех пунктов, кроме последнего. При попытке клика на последнем пункте менюшка появляется и сразу исчезает, как будто следом за mouseOver сразу же было сгенерировано и mouseOut... Пробовал другие варианты работы с методами builder типа clickAndHold, release и click, но эффект тот же. В чём может быть проблема? И есть ли альтернативные варианты реализации mouseOver для WebDriver?..


(Mykhailo Poliarush) #2

все очень просто вам надо использовать клик внути Action, иначе ваше действие получается внешним. Также надо учесть, что Action класс полностью поддерживается в фаерфоксе и хтмлюните. В других браузерах могут быть проблемы. 

{syntaxhighlighter brush: java;fontsize: 100; first-line: 1; }builder.moveToElement(menu).click(myLink).build().perform();{/syntaxhighlighter}


(Michael Leginchenko) #3

Добрый вечер.

Только начинаю автоматизировать и столкнулся с проблемой, не совсем похожей на данную ситуацию, но в целом...(Не могу навести мышь на меню)

<div class="editable-block" id="positions">
                <span name="CandidatePositions" class="label">Positions:</span>
                <a class="edit-link">Edit</a>
               
           
           
Пробовал выше указанный пример:

WebElement menu = driver.findElement(By.xpath("//*[@id='positions']"));      (ещё пробовал xpath(//*[@id='positions']/span))

WebElement myLink = driver.findElement(By.xpath("//*[@id='positions']/a"));

Actions builder = new Actions(driver);

builder.moveToElement(menu).click(myLink).build().perform();

 

Меню остаётся неактивным.

Также пробовал и остальные способы описанные на форуме.

Може есть еще варианты??

Заранее Благодарен!


(Mykhailo Poliarush) #4

ну надо смотреть на пример, так тяжело сказать, почему не работает

может быть происходят какие-то ошибки javascript

а может быть перемещение происходит не в то поле что нужно

а может быть какой-то обработчик срабатывает на другом элементе, не на том, что вы указали

в общем, надо смотреть на страницу


(mbeider) #5

 

Try this one with jQuery

((JavascriptExecutor) WebDriver).executeScript("$('#positions').trigger('mouseenter').find('a:eq(index)').trigger('click');");

 

$('positions') - finding menu

.trigger('mouseenter') - initiate mouse over that menu

.find('a:eq(index)') - looking for menu option after it had appeared on DOM

index- menu option you would like to click as integer

.trigger('click') - initiate click over menu option


(Michael Leginchenko) #6

Спасибо еще раз всем)  Пробовал последний пример - ничего.... пришлось использовать ROBOT и мышку туда навести.

Ещё раз всем благодарен!!!