Как написать правильный локатор на WebDriver для vk.com?

Привет.

Изучаю простейшие действия с Selenium WebDrvier. В выдуманном тесте: “Зайти в вк - найти пользователя - написать сообщение - отправить - проверить факт отправленного сообщения” не могу разобраться с локатором там где нужно вводить текст сообщения.
Например, Selenium IDE даже не записывает данный шаг - переход в окно сообщения и печатание самого текста.
Пытался самостоятельно разобраться с самим локатором, но безрезультатно.
Скорее всего, проблемой может быть:

  • не отрендерился элемент;
  • поменял свой идентификатор;
  • находится в другом фрейме;

Кто подскажет в чем проблема конкретно?

Несколько замечаний к оформлению поста:

  1. Создавайте более информативное название темы
  2. Создавайте тему в нужной категории

Для того чтобы понять, как написать локаторы, посмотрите видео. Потом попробуйте создать локатор. А потом напишите, если не получилось.

Chrome умеет определять xpath элемента.
http://titnet.ru/S44d — копируете xpath нужного элемента.
Далее всё просто.

require 'selenium-webdriver'

driver = Selenium::WebDriver.for :chrome
element = driver.find_element :xpath, '//*[@id="quick_email"]'
element.clear
element.send_keys 'foo@example.com'
1 лайк

Спасибо, учту.
Видео просмотрел, из нового узнал немного о CSS-селекторах.
Не смог определить верный локатор ( т.е., что бы я мог написать команду, например:

selenium.type("<локатор>", "Test Hello!");
selenium.click("id=im_send");

которая найдем элемент, напечатает текст и нажмет на кнопку “отправить”).

У меня тест проходит как пасс, но реально сообщение не отправляется.

Спасибо, но я знаю как пользоваться.
Вопрос был не совсем в этом.

Ну тогда прикладывайте в http://pastebin.com/ пример вашего html кода, без него дальше разбираться невозможно.

Пример приложил на Java.

Нужен не код теста, а код страницы, где вы что-то ищите

Сорри. [Приложил][1].
[1]: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/x - Pastebin.com
Нужно смотреть элемент и все что в нем (строки 58-69):

div id="im_txt_wrap5217047"

Спасибо большое за помощь!

Какой вы хотите конкретный ответ на свой абстрактный вопрос? Ответить на ваш вопрос можно только путем самостоятельного написания теста для vk.com, чего никто специально чтоб вам помочь делать с большой вероятностью не будет.

Сформулируйте конкретный вопрос, так вы скорее получите ответ. А пока, предложенные вами варианты вы и сами прекрасно сможете проверить, Firebug-ом умеете пользоваться?

Если хотите заниматься автоматизацией, вам просто необходимо самостоятельно научиться находить ответы на вопросы типа “почему драйвер не видит элемент”, потому что этот вопрос у вас будет возникать постоянно.

Поэтому сейчас первым делом проверьте все имеющиеся у вас гипотезы. Потом все вновь появившиеся гипотезы и так до тех пор пока все ваши идеи не иссякнут.

И только после того как вы в отчаянии решили прибегнуть к помощи сообщества, предоставьте всю необходимую информацию:

  • код теста
  • код html
  • скриншоты
  • что вы уже пытались сделать и у вас не получилось
  • и т.д.

Прям как в хорошем багрепорте, ага.

P.S. для инфо: то на чем вы пишете тест называется Selenium != WebDriver. WebDriver - совсем другой продукт

1 лайк

Не знаю, как вы смотрели, но из этого кода четко видно что есть id, если он генерируется динамически, тогда надо брать css или xpath и строить выражение относительное элементов, которые задают уникальность

<input id="im_title5217047" class="text im_title" type="text" maxlength="64">
selenium.type("id=im_title5217047", "Test Hello!");

но это скорее всего не сработает, так как ваш элемент находиться в javascript

<script type="text/javascript">
...
<input id="im_title5217047" class="text im_title" type="text" maxlength="64">
...
</script>

тут надо больше увидеть как появляются элементы и в каком контексте, т.е. после каких действий.