Думаю сделать выполнение скрипта во время теста на webdriver типа
$(’#some_element’).trigger(‘hover’);
Но не знаю, как мне имя или xpath элемента, который мне нужен и уже описан например в каком то pageobject классе. То есть я хочу сделать что-то типа такого:
string xpath = stoneHeader[i].GetAttribute("xpath"); //Только вот эта часть не работает!
string stringForExecute = "$x(" + xpath + ").trigger('hover')";
js.ExecuteScript(stringForExecute);
@asolntsev Спасибо большое за ответ, но у меня есть несколько нубских вопросов…:
А если у меня массив элементов? Мне писать
ExecuteScript("$(arguments[0]).trigger(‘hover’)", stoneHeader[i]); ?
arguments[0] - это какая то константа, или это myArguments[0]?
Всегда индекс писать [0] или он тоже дложен меняться? т.е. вы имели в виду arguments[i] ?
как бы еще в лог выводить “этот элемент был hovered”, для отладки…? =)
Написала пока так, но почему то элементы не становяться видимыми, в консоли браузера во время дебага ничего не видно (а должны ли там js команды вообще отобрадаться, которые я выполняю через тесты?):
for (int i = 0; i < stones.Count - 1; i++)
{
ExecuteScript("$(arguments[0]).trigger('hover')", stoneHeader[i]);
VerifyElementVisible("stoneDetailsBadge " + i, stoneDetailsBadge[i]);
}
arguments[0] - первый аргумент функции, в данном случае там единственный аргумент - myWebElement, т.е. вы используете ховер над myWebElement. Сделать это над массивом элемментов без доаолнительных телодвижений у вас не получится (да и зачем?).
Нет, arguments заменять не надо.
Первый вариант правильный:
for (int i = 0; i < stones.Count - 1; i++) {
ExecuteScript("$(arguments[0]).trigger(‘hover’)", stoneHeader[i]);
VerifyElementVisible("stoneDetailsBadge " + i, stoneDetailsBadge[i]);
}
Если элементы не становятся видимыми, значит, просто “trigger(‘hover’)” недостаточно, надо что-то ещё. Вероятно, надо уже с разработчиками консультироваться.
P.S. А почему не хотите использовать Actions, который позволяет наводить мышку без javascript?
В итоге оказазывается проблема с быстрым появлением-исчезанием элемента (подтвердил разработчик), надо как то задержать курсор или поставить какой то таймер наверное еще… Событие было все-таки hover.
Не соглашусь с бессмысленностью, был у меня один проект, на котором тоннами приходилось генерировать различные события клавиатуры и мыши, и было очень принципиально как реализовывать, и именно проходить по всем событиям. Но тут тоже нужно знать меру, зависит конечно от назначения теста.