Перейти к содержимому

Фотография

Selenium IDE. Прошу помочь начинающему.

Выбор элемента.

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 17

#1 Alex51M

Alex51M

    Новый участник

  • Members
  • Pip
  • 7 сообщений
  • ФИО:Александр Кондратьев

Отправлено 18 декабря 2015 - 15:21

Доброго времени суток.

Совсем недавно начал осваивать Selenium IDE. 

Возник такой вопрос:
Есть таблица, например это справочник людей, где есть поля: ЛОГИН(уникальный), Фамилия, Имя. А справа от каждой записи - управляющие кнопки,редактировать,открыть, удалить.

Над таблицей управляющая кнопка "Создать".

 

Суть проблемы в том, что например есть 200 записей и мне надо нажать на кнопку "Редактировать" именно у человека с логином,нуу,например "ААА" - он там такой один.

Дело в том,что сам IDE, нажатием на кнопку Select выводит:

//div[@id='userList']/table/tbody/tr[2]/td[7]/div/span[2]/a[2]/span - однако тут он просто ссылается на номер строки. 

Если искать именно по полю "Логин" - то будет:

//div[@id='userList']/table/tbody/tr[2]/td (получилось чуть меньше, чем в верхнем селекте) - т.е. опять же ссылается на строку и положение ячейки в строке.

Это мне НЕ нужно, т.к. строка может поменять своё положение и я обращусь не к тому элементу.

 

Получается, что в поиске:

//div[@id='userList']/table/tbody/tr[2]/td[7]/div/span[2]/a[2]/span  - мне надо заменить часть:

"/table/tbody/tr[2]/td[7]" - не на "координаты", а на именно логин. 

Самое интересное, что поиск просто по тексту: a[text ()=''] - ищет ТОЛЬКО те элементы, которые ВНЕ самой таблицы. Т.е. на заголовки, на кнопку "Создать",что вне таблицы и на НАИМЕНОВАНИЯ столбцов(ЛОГИН, Фамилия, Имя), если писать сами фамилии,имена или логины - ничего,мол нет таких.

И как вообще тогда быть?

Инспектируя саму ячейку с нужным Логином с помощью firebug адрес ячейки оказался таким:

<td class="width15-5 sortable renderable">ААА</td>

 

Помогите пожалуйста,как мне обратиться к нужной управляющей кнопке через Логин??

И если кто не сильно занят - можно задать ещё пару глупых вопросов в скайпе? :)


  • 0

#2 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 18 декабря 2015 - 15:57

//td[contains(text(),'AAA')]//..//span[contains(text(),'Редактировать')]

типа того

если б ты HTML код прислал , то можно было конечно точный xpath тебе отдать


  • 0

#3 Alex51M

Alex51M

    Новый участник

  • Members
  • Pip
  • 7 сообщений
  • ФИО:Александр Кондратьев

Отправлено 18 декабря 2015 - 16:48

Эммм,код? В том то и проблема,что я не программист и как бы, не могу дать код, т.к. хз,как его посмотреть...

И кнопка не имеет наименования "Редактировать", это её функциональность.

Иии "contains" - для чего он?


  • 0

#4 Alexei_13

Alexei_13

    Новый участник

  • Members
  • Pip
  • 31 сообщений
  • ФИО:Mikheev.A.V
  • Город:Tel aviv

Отправлено 20 декабря 2015 - 11:55

не очень понятно в чем суть проблемы ?
Html - в студию! 

 

 

Эммм,код? В том то и проблема,что я не программист и как бы, не могу дать код,

F12 может помоч!    Ну и :        https://www.youtube....h?v=SAAlqc5j1Ls

"contains" - нужен для проверки какого либо содержимого из текста например: 

assertTrue(findElement(By.tagName(«body»)).getText().contains(«текст»)

P.S.  писать тесты это не просто в Selenium набрать нужные действия, надо хотябы не много понимать код(java,C##,и т д), и уметь разбиратся в Html  (без обид просто без основ вам будет очень сложно! могу посоветовать некоторые полезные сайты, если интересно напишите какое тестирование вас интересует какой язык программирования ну и какими "инструментами" хотите работать!)


  • 0

#5 Alex51M

Alex51M

    Новый участник

  • Members
  • Pip
  • 7 сообщений
  • ФИО:Александр Кондратьев

Отправлено 22 декабря 2015 - 19:51

Я осваиваю, просто развиваюсь.

Мне хорошо знаком SQL, ожидал сходства.

Появилась такая проблема:

В общем, поиск по тексту всё-таки работет хорошо,вот например:

//div[@id='userList']/table/tbody/tr/td[text()= 'sas'] - всё отлично. Он находит на нужной строке нужную ячейку. Но появилась такая проблема:

мне нужно в этой же строке обратиться к кнопке и дело в том, что по этому запросу //div[@id='userList']/table/tbody/tr/td[text()= 'sas'] я обращаюсь именно к ячейке "sas", а надо то не к ячейке с "sas", а к кнопке которая находится в строке с этим "sas".

Саму кнопку я нашёл так:

//div[@id='userList']/table/tbody/tr[31]/td[7]/div/span[2]/a[2]

и суть в том, что:

//div[@id='userList']/table/tbody/tr/td[text()= 'sas']  это тоже самое что и //div[@id='userList']/table/tbody/tr[31]

 

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

//div[@id='userList']/table/tbody/tr(contains[td[text()= 'sas'])/div/span[2]/a[2] - но, видимо,так писать нельзя,потому,что он не находит

Я пытался гуглить и нашёл вот ту описание:

https://siderulezzz....17/12/#more-150

Пытался сделать как там:

//td[contains(text(), ‘sas')]/parent::td/preceding-sibling::div/span[2]/a[2] - но не отработало.

Я понимаю,что наверняка это очень простые вопросы, но я в конец запутался.

 

Ну и было б здорово кого-нибудь онлайн спросить(


  • 0

#6 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 22 декабря 2015 - 21:57

Посмотри вот здесь
http://software-test...ce/#entry144601
У тебя такая же проблема, только в той теме человек дал html код и получил готовый xpath ...
  • 0

#7 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 23 декабря 2015 - 10:50

Если ячейка это:
//div[@id='userList']/table/tbody/tr/td[text()= 'sas']
А кнопка:
//div[@id='userList']/table/tbody/tr[31]/td[7]/div/span[2]/a[2]
И //div[@id='userList']/table/tbody/tr/td[text()= 'sas'] = //div[@id='userList']/table/tbody/tr[31]
 
То вариант такой:
//div[@id='userList']//td[text()= 'sas']//a[2]
("//" - позволяют не прописывать строго весь путь вроде "/table/tbody/", "//a[2]" заменяет "/td[7]/div/span[2]/a[2]")
 
Если из двух ссылок - "редактировать" только в одной - то можно так:
//div[@id='userList']//td[text()= 'sas']//a[contains(text(),'Редактировать')]

  • 0

#8 Alex51M

Alex51M

    Новый участник

  • Members
  • Pip
  • 7 сообщений
  • ФИО:Александр Кондратьев

Отправлено 23 декабря 2015 - 19:31

//div[@id='userList']//td[text()= 'sas']//a[2] - не отработало(

У меня глупый вопрос, очередной:

Вот когда я пишу:   //div[@id='userList']//td[text()= 'sas'] - разве я не фильтрую всё вплоть до конкретной ячейки с "sas"? В том смысле,что когда я дописываю "//a[2]" - разве он не будет искать это самое "//a[2]" в самой ячейке с "sas"?

 

 

 

 

Если из двух ссылок - "редактировать" только в одной - то можно так:
//div[@id='userList']//td[text()= 'sas']//a[contains(text(),'Редактировать')]

 

Там нет слова "редактировать" - это функция кнопки, она не имеет наименования, только иконка. Её тип "span", она находится в той же таблице, т.е.

<table>

<tr><td>ячейка со словом "sas"</td> тут кнопки(как я понял она в div) </tr>

и так много строк

</table>


  • 0

#9 seven_sunsets

seven_sunsets

    Новый участник

  • Members
  • Pip
  • 18 сообщений
  • ФИО:Гришаев Станислав

Отправлено 24 декабря 2015 - 09:59

//div[@id='userList']//td[text()= 'sas']//a[2] - не отработало(

У меня глупый вопрос, очередной:

Вот когда я пишу:   //div[@id='userList']//td[text()= 'sas'] - разве я не фильтрую всё вплоть до конкретной ячейки с "sas"? В том смысле,что когда я дописываю "//a[2]" - разве он не будет искать это самое "//a[2]" в самой ячейке с "sas"?

 

 

 

 

Если из двух ссылок - "редактировать" только в одной - то можно так:
//div[@id='userList']//td[text()= 'sas']//a[contains(text(),'Редактировать')]

 

Там нет слова "редактировать" - это функция кнопки, она не имеет наименования, только иконка. Её тип "span", она находится в той же таблице, т.е.

<table>

<tr><td>ячейка со словом "sas"</td> тут кнопки(как я понял она в div) </tr>

и так много строк

</table>

 

не совсем по теме, но попробуйте использовать плагин для FF, очень хорошо помогает в нахождении уникального xpath - https://addons.mozil...ebdriv/?src=api


  • 1

#10 serjb9

serjb9

    Новый участник

  • Members
  • Pip
  • 68 сообщений

Отправлено 25 декабря 2015 - 10:12

 

не совсем по теме, но попробуйте использовать плагин для FF, очень хорошо помогает в нахождении уникального xpath - https://addons.mozil...ebdriv/?src=api

 

+1, только выбирать надо только те xpath'ы, которые строят относительные пути до элементов (ну и с зелененьким воскл знаком :) )

есть еще firepath https://addons.mozil...addon/firepath/


  • 0

#11 Jericho

Jericho

    Новый участник

  • Members
  • Pip
  • 3 сообщений
  • ФИО:Клименко Евгений

Отправлено 28 декабря 2015 - 14:52

Воспользуйся чудесной функцией contains

Значение ячейки таблицы получишь примерно в таком виде:

 

css=span[class="someClass"]:contains('someTextForIdentifyButton')


  • 0

#12 Jericho

Jericho

    Новый участник

  • Members
  • Pip
  • 3 сообщений
  • ФИО:Клименко Евгений

Отправлено 28 декабря 2015 - 15:00

И да, может быть гораздо проще дать html-код?


  • 0

#13 Alex51M

Alex51M

    Новый участник

  • Members
  • Pip
  • 7 сообщений
  • ФИО:Александр Кондратьев

Отправлено 28 декабря 2015 - 18:22

Сейчас пойму как картинку приложить и дам, просто он ток как ссылку выдаёт их

Вообще,если я правильно понял, надо сначала обратиться к строке,потом уже к нужной ячейке.

Я пробовал написать :

//div[@id='userList']//tr[contains (td[text()= 'sas'])] - что бы обратиться именно к строке, в которой есть поле с текстом sas - но почему-то не ищет,видимо я пишу криво

А потом я думал уж дописать div/span[2]/a[2]/span и попасть в нужную кнопку.


  • 0

#14 Alex51M

Alex51M

    Новый участник

  • Members
  • Pip
  • 7 сообщений
  • ФИО:Александр Кондратьев

Отправлено 28 декабря 2015 - 18:26

Вот

Прикрепленные файлы


  • 0

#15 Jericho

Jericho

    Новый участник

  • Members
  • Pip
  • 3 сообщений
  • ФИО:Клименко Евгений

Отправлено 29 декабря 2015 - 06:07

Попробуй обратиться в формате:

click | css=tr:contains('sas') a[contains(@href, '#user/edit/')]


  • 0

#16 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 29 декабря 2015 - 06:34

Вот

Не совсем понятно, где поле с логином (рядом с которым нужно кнопку нажимать).

А вообще - у выделенной на скрине кнопки - hidden, вполне вероятно, что именно поэтому она селениумом и не нажимается, какие бы локаторы вы не придумывали.

Предполагаю, что на самом деле нужно искать "//a[contains(@href,'#user/edit')]" (первый элемент а, а не второй).

Возможно проблема именно в этом - тогда можно попробовать локаторы, которые приводили выше, только не a[2] брать, а a[1] (либо - как указано выше "//a[contains(@href,'#user/edit')]").

 

Есть альтернативный вариант.

На скрине нет элемента с логином. Есть некоторая не 100% вероятность, что в указанном элементе "#user/edit/157" - 157 это айдишник пользователя. Возможно, такой же айдишник есть и в элементе с логином.

В этом случае, можно сначала найти уже известным, насколько я поняла, способом элемент с логином и вытащить оттуда айдишник. Тогда нужная кнопка будет искаться как "//a[contains(@href,'#user/edit/" + userId + "')]" (без всяких дополнительных завязок на поле с логином).


  • 0

#17 Alex51M

Alex51M

    Новый участник

  • Members
  • Pip
  • 7 сообщений
  • ФИО:Александр Кондратьев

Отправлено 18 января 2016 - 15:51

Поле с логином это "ИМя"там и написано "Sas", куда уж понятнее.

Вот запрос, он находит ячейку в строке
xpath=((//tr/td[contains(text(),'sas')])
Теперь надо как-то найти кнопку, отдельно она находится как:
//button[@type='button']
Как мне теперь объединить эти запросы?
xpath=((//button[@type='button'])[//tr/td[contains(text(),'sas')]])  - вот так игнорирует текст и находит ПЕРВУЮ кнопку в таблице
xpath=((//tr/td[contains(text(),'sas')])[//button[@type='button']]) - находит текст, но не идёт дальше и не находит кнопку, как бытЬ?

  • 0

#18 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 19 января 2016 - 07:29

Под "где поле с логином" - предполагалось то, где именно и в каком виде это поле находится в коде. Уж на скрине формы я поле визуально как-нибудь могу найти :).

Нельзя сказать, как "объединить эти запросы", потому что оба селектора идут от корня, где именно они "пересекаются" - не понятно. Грубо говоря, эти селекторы говорят, что "где-то на странице" есть tr/td с логином и "где-то на странице" есть кнопка, между собой эти "где-то" у вас никак не связаны, "объединять" их в таком виде - не имеет смысла.

На скрине с кодом - видно, где в структуре располагается кнопка и в каком виде. Но на этом скрине нет элемента с логином, чтобы можно было увидеть его код и его расположение относительно кнопки.

То, что они на готовой форме рядом - ещё ничего не значит.


  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных