Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

[Resolved] javascript для фокуса выпадающего списка


(Рома) #1

Доброго времени суток. Есть домашняя страница, в ней расположен выпадающий список “Фильмы”, который включает жанры Боевик, Драма и др.
Необходимо реализовать методы перехода на странички “Боевик”, “Драма” и т.д. При нажатии на кнопку Фильмы, нас редиректит на страничку Все фильмы, поэтому нужно сначала сделать фокус на кнопке Фильмы, а потом кликнуть на жанр “Боевик”. Я попытался реализовать это через javascript. (Другого способа вроде нету?). Это мой первый js. Подскажите что я сделал не правильно. Спасибо.

JavascriptExecutor js = (JavascriptExecutor)driver;

@FindBy(css=".header-bottom a[href='/filmy']")
private WebElement linkFilms;

@FindBy(css=".header-bottom a[href='/filmy/adventure']")
private WebElement linkFilmsAdventure;

public FilmsAdventure goToFilmsAdventure() {
    js.executeScript("document.linkFilms.focus()");
    linkFilmsAdventure.click();
    return PageFactory.initElements(driver, FilmsAdventure.class);
}

(sidelnikovmike) #2

Попробуйте через Actions

Ваш код будет примерно следующим(по крайней мере помню случаи, когда у меня получалось сделать похожие действия так):

Actions actions = new Actions(driver);
actions.moveToElement(linkFilms).click(linkFilmAdventure).build().perform();

(Sergey Korol) #3
  1. Actions -> moveToElement.
  2. executeScript("$('CSS_SELECTOR').hover()")

(sidelnikovmike) #4

Второй вариант хорош, но для этого на странице должен быть подключен jquery. Сейчас, наверное, мало где его нету, но всё же стоит об этом не забывать.


(vmaximv) #5

лишний :wink:


(sidelnikovmike) #6

Да, возможно.


(Рома) #7

Сделал через jquery, вот такую ошибку получил http://screencast.com/t/pXrGB8C2

Сорри, мб это не очень информативный скрин, вот другой http://screencast.com/t/DWYl0l8Ymzp


(Рома) #8

http://screencast.com/t/SF8Ky1vU а вот через экшн попытался сделать


(sidelnikovmike) #9

А Вы же локально запускаете? При выполнении экшна - меню нужное появляется? Можете разделить наведение и нажатие на разые экшны и поставить слип между ними и поглядеть, появилось ли желаемое на экране.
По поводу js - а если в двойные кавычки заключить локатор? Я не супер знаток, но мало ли.

PS: имя класса TestFilmsShit - это просто супер :smile: :smile: Поправьте лучше, если Вы это сделали не специально. Есть у меня один пример, когда оставленное случайно “нехорошее” слово в коде стало причиной увольнения.


(Рома) #10

Разделил на разные экшены - помогло. Спасибо! По поводу названия теста - это на моей локалке, тестовые тесты. Сначала вот пишу фреймворк, и прогоняю тестовые тесты, а потом уже норм пилить)

Может кто то еще подскажет все таки, в чем не верна запись через js?


(sidelnikovmike) #11

Отлично, что получилось.
Попробуйте в двойные кавычки локатор внутри команды js вписать.