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

Проблема при определении элемента для последующих операций с ним.


(roman_ua) #1

Создам отдельную ветку для своего вопроса. В общем существует проблема, связанная с тем, что при запуске теста в eclipse (WebDriver) не выполняется команда click() Стек ошибки element not found.

Собственно, часть моего теста спокойно можно воспроизвести, а главное без ошибок в Selenium IDE. ( http://kiev.karabas.com/ru/--order/132408001.html - картинка на которой нужно сделать клик по ячейке)

Если да, то входите ли вы в iFrame, в котором расположен SVG объект? - я пытаюсь подставить тот же локатор который мне воспроизводит Selenium IDE.

driver.findElement(By.cssSelector("#g3264 > text")).click();

И пробуете ли кликнуть по координатам? - Как кликнуть по координатам?


(roman_ua) #2

И еще такой вопрос раз уж я могу выполнить свои тест в Selenium IDE, то могу ли я сделать цикл, который бы накликивал такие вот места в корзину.


(Сергей Блохин) #3

Покажи код Selenium IDE. У меня не получилось записать в нём клик по свободному месту в зале.

Несколько ссылок для информации:
Testing an SVG game with Selenium WebDriver


(Александр Таранков) #4

Я бы попробовал сначала напрямую с SVG-объектом поработать: http://karabas.frontmanager.com.ua/svg/53679675.svg

P.S. если имеешь доступ к разработчикам срочно пиши им юзабилити-блокер. Нечто ужасное творится с цветовой гаммой: места “Зарезервировано”, “180 грн.” и “450 грн.” одного цвета. Те оттенки, которые выбраны, нифига не различаются глазом, когда объекты, выкрашенные в указанные цвета, расположены далеко друг от друга


(Aleksey) #5

Почитайте вот это ишью - там вроде бы как четко сказано, что svg-документ, встроенный в object-тег не обрабатывается веб-драйвером: http://code.google.com/p/selenium/issues/detail?id=4647

Как вариант, вставляйте svg-объект инлайн, тогда веб-драйвер должен находить все вложенные теги и ссылки, приведенные @TIT помогут вам найти нужные элементы.


(Сергей Блохин) #6

Была ещё мысль работать с элементами через JavaScript getElement, click и т. д., но усложнилась она тем, что SVG внутри Object, который внутри iFrame.


(Александр Таранков) #7

Хм, ну тогда можно попробовать такой вариант:

// получить URL SVG-документа
String svgUrl = driver.findElement(By.xpath("//object")).getAttribute("svg-src");

// загрузить документ
driver.get(svgUrl);

// работать внутри SVG-документа
driver.findElement(By.xpath("поиск внутри SVG-объекта"));

// вернуться обратно
driver.get(baseURL)

Стоит попробовать. Проблема может быть с последним шагом по возвращению к предыдущей странице, если на неё в тесте нет прямого урла, либо он в принципе не предусмотрен. Но тут надо смотреть по месту, какие могут быть варианты решения.

Ещё как вариант, попробовать работать с SVG-документом через отдельный (от основного) драйвер (и отдельный же браузер). Тут надо смотреть так же насколько такой вариант приемлем


(Александр Таранков) #8

Проблема в том что внутренности SVG не в DOM-е страницы. Можно ли до них с помощью JS добраться? Если только подгрузить документ ajax-ом? Возможно такое? Сам такое никогда не пробовал


(Aleksey) #9

Вариант, но суть задачи ведь не просто кликнуть по элементу, а и продолжить какое-то действие, используя функционал основной страницы (например, оформить покупку).
Думаю, что проще вставлять svg прямо в документ без тега object (или вставлять в iframe), в этом случае вебдрайвер должен нормально работать с этим элементом. Это вопрос к разработчикам согласны ли они на такое изменение (не силен в новомодных подходах работы с html)


(roman_ua) #10

Спасибо всем за ответы, буду пробовать, отпишу как прошли эксперименты.


(roman_ua) #11

http://clip2net.com/s/6F6CKY

вот такой код в Selenium IDE клик по месту работает в нем.