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

Фотография

элементы с одинаковыми характеристиками


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

#1 Jenka156

Jenka156

    Активный участник

  • Members
  • PipPip
  • 137 сообщений
  • ФИО:Женя


Отправлено 10 августа 2011 - 13:34

Здравствуйте. при тестировании приложения была обнаружена такая вот вещь:
нужно нажать на изображение скрепки чтоб прикрепить файл (см. скрин):
Изображение
проблема в том, что у всех скрепок на странице получаются одинаковые xpath и нажать на первую еще можно, а на вторую и последующие используюя только xpath не получится, так как нажимает снова на первую картинку.
вот код (первая скрепка):
<td class="x-grid3-col x-grid3-cell x-grid3-td-2 x-grid3-cell-last x-grid3-cell-selected" style="width: 34px; " tabindex="0">
  <div class="x-grid3-cell-inner x-grid3-col-2" unselectable="on">
    <form id="F259_10" name="F259_10" method="POST" action="/user/edituser/upload" class="file-upload-form">
      <input type="file" name="myfile" id="myfile259_10" size="1" class="file-uploader" title="Редактировать" onchange="uploadFile('259_10', 7);">
        <img src="/Skins/defaultskin/Images/addFile.png" class="file-upload-pict">
    </form>
  </div>
</td>

и вторая скрепка:
<td class="x-grid3-col x-grid3-cell x-grid3-td-2 x-grid3-cell-last " style="width: 34px; " tabindex="0">
  <div class="x-grid3-cell-inner x-grid3-col-2" unselectable="on">
    <form id="F260_10" name="F260_10" method="POST" action="/user/edituser/upload" class="file-upload-form">
      <input type="file" name="myfile" id="myfile260_10" size="1" class="file-uploader" title="Редактировать" onchange="uploadFile('260_10', 7);">
        <img src="/Skins/defaultskin/Images/addFile.png" class="file-upload-pict">
    </form>
  </div>
</td>

здесь отличаются только названия форм и input, но я пробовала связать с ними событие clickAt(), ничего не происходит.
подскажите, на что в таких случаях можно ориентироваться? какие способы клика на элемент еще можно использовать?
  • 1

#2 ekulgavaya

ekulgavaya

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

  • Members
  • Pip
  • 50 сообщений
  • ФИО:Елена
  • Город:Minsk, Belarus


Отправлено 10 августа 2011 - 13:58

Здравствуйте Jenka156,

Попробуйте
xpath=//input[@name='myfile'][i] 
i - номер скрепки


Вообще перед этим целесообразно посчитать сколько скрепок, чтоб не тыкать в никуда)
должен быть метод
getXpathCount ("xpath=//input[@name='myfile']")
. Однако это недоступно посредством Selenium IDE.


Если этот способ не сработает, пришлите пожалуйста хотя бы пару тегов общих для этих скрепок ( они же лежат в одной таблице, лежащей в теге div ).


  • 0
In God we trust, the rest we test.

#3 alena b

alena b

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

  • Members
  • Pip
  • 23 сообщений
  • ФИО:Alena

Отправлено 10 августа 2011 - 16:10

Если уж на то пошло, то i надо приписывать не к input, а к td или вообще tr. И вообще напротив каждой скрепки есть имя (АФайл и ВФайл). Поэтому можно написать разные xpathы для разных скрепок.
  • 0

#4 ekulgavaya

ekulgavaya

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

  • Members
  • Pip
  • 50 сообщений
  • ФИО:Елена
  • Город:Minsk, Belarus


Отправлено 10 августа 2011 - 16:22

Если уж на то пошло, Алена Б, то специфика extjs такова, что привязаться к конкретному тегу по классу очень сложно, про айдишники я вообще молчу. И все же, это реально, и отличное решение, но для этого, как говорилось раньше, нужно знать общий код какой-то, а так же отличие кода со скрепкой от кода с карандашиком. А по поводу имен, подозреваю, что далеко не для каждого теста вообще будут скрепки, а если и будут, то не с именами АФайл. Да и в будущем крайне не рекомендую вам привязываться к тексту.

С уважением.
  • 0
In God we trust, the rest we test.

#5 alena b

alena b

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

  • Members
  • Pip
  • 23 сообщений
  • ФИО:Alena

Отправлено 10 августа 2011 - 16:56

Отличие кода скрепки от кода карандаша - это же в аттрибуте src: img src="/Skins/defaultskin/Images/addFile.png" - у карандаша там будет другое png.
Вообще, ситуация вроде как раз та самая где к тексту ,находящемуся напротив скрепки , и надо привязываться. :ok:
  • 0

#6 ekulgavaya

ekulgavaya

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

  • Members
  • Pip
  • 50 сообщений
  • ФИО:Елена
  • Город:Minsk, Belarus


Отправлено 10 августа 2011 - 17:12


alena b ,

Не могли бы вы привести пример, как от привязки к тексту в данном конкретном случае перейти непосредственно к скрепке?
Ведь, очевидно же, что текст, которому соответствует скрепка лежит в другом <td>, который не является ни parent ни сhild для скрепки. Соответственно, после того, как будет найден тег с текстом, нужно будет возвращаться на один элемент вверх по иерархии, а потом переходить к тегу со скрепкой.


По поводу картинок. здесь ситуация та же самая. Тег с картинкой является вложенным для искомого. Остается надежда на то, что карандашик - Input другого типа, либо вообще не Input.


Спасибо

  • 0
In God we trust, the rest we test.

#7 Demetri

Demetri

    Активный участник

  • Members
  • PipPip
  • 143 сообщений
  • ФИО:Дмитрий
  • Город:Podgorica, MNE


Отправлено 11 августа 2011 - 03:48

А почему-бы и не возвращаться в верх по иерархии? :smile:
По тексту можно привязаться так:
//td[contains(text(),'АФайл')]/..//input[@name='myfile']
аналогично и по тегу с картинкой:
//img[contains(@src,'addFile.png')]/../input

  • 0
Hi! I'm a signature virus. Copy me into your signature to help me spread.

#8 ekulgavaya

ekulgavaya

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

  • Members
  • Pip
  • 50 сообщений
  • ФИО:Елена
  • Город:Minsk, Belarus


Отправлено 11 августа 2011 - 06:25

Если уж мы спустились до
//img[contains(@src,'addFile.png')]/../input
то я не понимаю, чем плох вариант
xpath=//input[@name='myfile'][i]
Ведь его имя как раз свидетельствует о том, что этот инпут работает с файлом.
К тому же, просмотрев еще раз код, поняла, что можно добавить

xpath=//input[@name='myfile' and contains(@id, 'myfile')] 

  • 0
In God we trust, the rest we test.

#9 alena b

alena b

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

  • Members
  • Pip
  • 23 сообщений
  • ФИО:Alena

Отправлено 11 августа 2011 - 09:25

Если уж мы спустились до

//img[contains(@src,'addFile.png')]/../input
то я не понимаю, чем плох вариант
xpath=//input[@name='myfile'][i]
Ведь его имя как раз свидетельствует о том, что этот инпут работает с файлом.
К тому же, просмотрев еще раз код, поняла, что можно добавить

xpath=//input[@name='myfile' and contains(@id, 'myfile')] 


Не очень поняла. Но xpath=//input[@name='myfile'][i] прокатит только при i=1
Для продвижения вверх по иерархии можно использовать либо /../../ либо слово ancestor - ancestor::foo[1]/@id
Про все это можно почитать в туториалах по xpath. Нет ничего невозможного, по кр мере в данном конкретном примере :blush: . Если элементы на странице находятся в разных местах, то и xpath к ним можно написать разные :victory: . И от любого элемента можно перейти к другому.
В данном случае по идее создаем нечто с именем (желательно-обязательно уникальным) как здесь АФайл , запоминаем переменную и спокойно привязываемся к тексту.
:acute: Только не надо злиться и обижаться=)
  • 0

#10 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 11 августа 2011 - 10:04

Но xpath=//input[@name='myfile'][i] прокатит только при i=1

Это правда. Индексация работает для элементов, находящихся на одном уровне в DOM-дереве. То есть в данном случае -- для строк таблицы, tr.
Поэтому для получения элемента по индексу надо сделать вот так (предположим, что у таблицы есть некоторый идентификатор):

"//table[@id='sometable']/tr[" + i + "]//input[@name='myfile']"
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#11 ekulgavaya

ekulgavaya

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

  • Members
  • Pip
  • 50 сообщений
  • ФИО:Елена
  • Город:Minsk, Belarus


Отправлено 11 августа 2011 - 10:14

"//table[@id='sometable']/tr[" + i + "]//input[@name='myfile']"


Именно для этого я и попросила общий кусочек кода.

(желательно-обязательно уникальным) как здесь АФайл


А откуда вы знаете какое имя будет у этого элемента? Или тесты нужно затачивать под какие-то конкретные значения?

Уважаемая Алена, если Вы прочитали так много туториалов по Xpath, то и привели бы решение, а не занимались абстракцией. Думаю, раз человек обратился на форум за помощью, он ждет решения, а не философских мыслей.

Только не надо злиться и обижаться=)


  • 0
In God we trust, the rest we test.

#12 Jenka156

Jenka156

    Активный участник

  • Members
  • PipPip
  • 137 сообщений
  • ФИО:Женя


Отправлено 11 августа 2011 - 10:28

Вот более общий кусок кода. такого хватит?
<div class="x-grid3-row ux-maximgb-tg-level-1   " style="width: 658px; ">
 <table class="x-grid3-row-table" border="0" cellspacing="0" cellpadding="0" style="width: 658px; ">
  <tbody>
   <tr>
    <td class="x-grid3-col x-grid3-cell x-grid3-td-name x-grid3-cell-first " style="width: 283px; " tabindex="0">
     <div class="x-grid3-cell-inner x-grid3-col-name" unselectable="on">
      АФайл
     </div>
    </td>
    <td class="x-grid3-col x-grid3-cell x-grid3-td-1 " style="width: 341px; " tabindex="0">
     <div class="x-grid3-cell-inner x-grid3-col-1" unselectable="on">
      &nbsp;
     </div>
    </td>
   <td class="x-grid3-col x-grid3-cell x-grid3-td-2 x-grid3-cell-last " style="width: 34px; " tabindex="0">
    <div class="x-grid3-cell-inner x-grid3-col-2" unselectable="on">
     <form id="F259_10" name="F259_10" method="POST" action="/user/edituser/upload" class="file-upload-form">
      <input type="file" name="myfile" id="myfile259_10" size="1" class="file-uploader" title="Редактировать" onchange="uploadFile('259_10', 7);">
       <img src="/Skins/defaultskin/Images/addFile.png" class="file-upload-pict">
     </form>
    </div>
   </td>
  </tr>
  <tr class="x-grid3-row-body-tr" style=""><td colspan="3" class="x-grid3-body-cell" tabindex="0" hidefocus="on"><div class="x-grid3-row-body">
 </div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="x-grid3-row ux-maximgb-tg-level-1  x-grid3-row-alt" style="width: 658px; ">
 <table class="x-grid3-row-table" border="0" cellspacing="0" cellpadding="0" style="width: 658px; ">
  <tbody>
   <tr>
    <td class="x-grid3-col x-grid3-cell x-grid3-td-name x-grid3-cell-first " style="width: 283px; " tabindex="0">
     <div class="x-grid3-cell-inner x-grid3-col-name" unselectable="on">
      ВФайл
     </div>
    </td>
   <td class="x-grid3-col x-grid3-cell x-grid3-td-1 " style="width: 341px; " tabindex="0">
    <div class="x-grid3-cell-inner x-grid3-col-1" unselectable="on">
     &nbsp;
    </div>
   </td>
   <td class="x-grid3-col x-grid3-cell x-grid3-td-2 x-grid3-cell-last " style="width: 34px; " tabindex="0">
    <div class="x-grid3-cell-inner x-grid3-col-2" unselectable="on">
     <form id="F260_10" name="F260_10" method="POST" action="/user/edituser/upload" class="file-upload-form">
      <input type="file" name="myfile" id="myfile260_10" size="1" class="file-uploader" title="Редактировать" onchange="uploadFile('260_10', 7);">
      <img src="/Skins/defaultskin/Images/addFile.png" class="file-upload-pict">
     </form>
    </div>
   </td>
  </tr>
  <tr class="x-grid3-row-body-tr" style=""><td colspan="3" class="x-grid3-body-cell" tabindex="0" hidefocus="on"><div class="x-grid3-row-body">
</div>
</td>
</tr>
</tbody>
</table>
</div>

  • 0

#13 ekulgavaya

ekulgavaya

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

  • Members
  • Pip
  • 50 сообщений
  • ФИО:Елена
  • Город:Minsk, Belarus


Отправлено 11 августа 2011 - 10:57

Нашла у себя в заначке малюсенький туториал с подобным случаем ( когда-то писала для юных дарований), надеюсь, Женя, он будет вам полезен.Прикрепленный файл  XpathCreateExample.rar   440,81К   17 Количество загрузок:
  • 0
In God we trust, the rest we test.

#14 ekulgavaya

ekulgavaya

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

  • Members
  • Pip
  • 50 сообщений
  • ФИО:Елена
  • Город:Minsk, Belarus


Отправлено 11 августа 2011 - 11:13

Вот более общий кусок кода. такого хватит?


Это немножко не то) Но исходя из этого кода можно сделать следующее
1) нумерацию (То самое i) привязывать вот к этому элементу
<div class="x-grid3-row ux-maximgb-tg-level-1   " style="width: 658px; ">
То есть локатор будет содержать следующее
div[contains(@class, 'ux-maximgb-tg-level-1')]
вместо ux-maximgb-tg-level-1 можно вставить только ту часть, которой этот класс отличается от остальных
2) Нужно будет каким-то образом указать элемент (общий, про который говорилось выше), где лежат эти div-ы ( пусть это будет
<div name = "personal-info-table" > </div>
) Поищите сами на страничке. Таким образом у нас уже имеется
"//div[@name='personal-info-table'] // div[contains(@class, 'ux-maximgb-tg-level-1')][i]"
3)Теперь можно из каждого такого div-a выбрать нужный инпут:
"//div[@name='personal-info-table'] // div[contains(@class, 'ux-maximgb-tg-level-1')][i]//input[@name='myfile']"


Надеюсь, что помогла вам
  • 1
In God we trust, the rest we test.

#15 Jenka156

Jenka156

    Активный участник

  • Members
  • PipPip
  • 137 сообщений
  • ФИО:Женя


Отправлено 11 августа 2011 - 13:33

Спасибо за помощь, для картинки xpath написала. теперь тест находит ее. но только при нажатии ничего не происходит почему-то. Должно появиться окно загрузки файла, но оно не появляется.
я пробовала и click() и clickAt и вот этот способ:
        $this->mouseDownAt($this->clip1, "4,4");
        $this->mouseUpAt($this->clip1, "4,4");
окно все равно не появляется...

сейчас пробовала выполнить эти действия в IDE. там на событие клика по скрепке не появляется никакой команды, хотя окно загрузки файла открывается. почему так?

Сообщение отредактировал Jenka156: 11 августа 2011 - 13:44

  • 0

#16 ekulgavaya

ekulgavaya

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

  • Members
  • Pip
  • 50 сообщений
  • ФИО:Елена
  • Город:Minsk, Belarus


Отправлено 11 августа 2011 - 13:48

Хм, а Вы уверены, что элемент подгрузился, к тому моменту когда скрипт на него нажимает?

там на событие клика по скрепке не появляется никакой команды


где не появляется?

Сообщение отредактировал ekulgavaya: 11 августа 2011 - 13:49

  • 0
In God we trust, the rest we test.

#17 Jenka156

Jenka156

    Активный участник

  • Members
  • PipPip
  • 137 сообщений
  • ФИО:Женя


Отправлено 12 августа 2011 - 05:27

ну вот:

Изображение

получается там, куда указывает стрелка должна быть команда click и xpath скрепки, а ее нет. хотя у меня открывается окно загрузки файла, я выбираю файл, жму ОК и вижу уже следующую команду по добавлению имени файла в форму.

Изображение
  • 0

#18 ekulgavaya

ekulgavaya

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

  • Members
  • Pip
  • 50 сообщений
  • ФИО:Елена
  • Город:Minsk, Belarus


Отправлено 12 августа 2011 - 06:16

Ну теперь, если посмотреть на код, который вы присылали раньше, а именно вот сюда
<input type="file" name="myfile" id="myfile259_10" size="1" class="file-uploader" title="Редактировать" onchange="uploadFile('259_10', 7);">
Это код именно того элемента, по которому вы кликаете, обратите внимание на аттрибут id="myfile259_10"Теперь, если посмотреть на скрин, который вы прислали, вот здесьПрикрепленный файл  img.png   57,38К   4 Количество загрузок:Видно, что Селениум даже и не пытается кликать по нему, и отлавливать форму загрузки файла ( она у вас очевидно стандартная), а сразу вводит в этот инпут путь к загружаемому файлу.


После загрузки, у вас же появляется имя файла с крестиком, вот сделайте загрузку командой type, а потом проверьте, что появилось имя файла.
  • 0
In God we trust, the rest we test.

#19 Jenka156

Jenka156

    Активный участник

  • Members
  • PipPip
  • 137 сообщений
  • ФИО:Женя


Отправлено 12 августа 2011 - 06:51

да, форма загрузки стандартная. и проверить, загрузился ли файл, могу сохранив пользователя и потом посмотрев его профиль еще раз. там название файла будет в виде ссылки. нажимаешь на нее и файл скачивается. по идее здесь ошибок быть не должно и этот этап можно пропустить?
  • 0

#20 ekulgavaya

ekulgavaya

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

  • Members
  • Pip
  • 50 сообщений
  • ФИО:Елена
  • Город:Minsk, Belarus


Отправлено 12 августа 2011 - 08:12

да, форма загрузки стандартная. и проверить, загрузился ли файл, могу сохранив пользователя и потом посмотрев его профиль еще раз. там название файла будет в виде ссылки. нажимаешь на нее и файл скачивается. по идее здесь ошибок быть не должно и этот этап можно пропустить?


Я тоже думаю, что можно пропустить, проверьте просто, что появилось имя файла у пользователя. Мне кажется, этого будет достаточно.
  • 0
In God we trust, the rest we test.


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

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