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

Фотография

xpath для элементов, которые постоянно меняются местами


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

#1 Jenka156

Jenka156

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

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


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

Здравствуйте! Задача вот какая: есть два input элемента на странице. Сначала, когда страница открывается, они вообще отсутствуют в коде. Добавляются в код динамически при щелчке на место на странице, на котором они по идее находятся. Проблема в том, что идентифицировать эти input по каким то уникальным параметрам невозможно. параметр name у них вообще пустой, а id постоянно меняется. Вот код (это уже подгруженные элементы):

<div class="x-grid3-scroller" id="ext-gen63" style="overflow-x: hidden; width: 1258px; height: 347px;">
<div class="x-layer x-editor x-small-editor x-grid-editor" id="ext-comp-1026" style="overflow: auto; position: absolute; z-index: 11000; visibility: hidden; left: -10000px; top: -10000px;">
  <input type="text" name="" id="ext-comp-1025" autocomplete="off" size="20" class="x-form-text x-form-field" style="width: 631px; height: 16px;"></div>
<div class="x-layer x-editor x-small-editor x-grid-editor" id="ext-comp-1036" style="overflow: auto; position: absolute; z-index: 11000; visibility: visible; left: 535px; top: 43px;">
  <input type="password" name="" id="ext-comp-1035" autocomplete="off" size="20" class="x-form-text x-form-field" style="width: 631px; height: 16px;">
</div>
</div>

Пробовала идентифицировать через родителей:
//div[@class='x-grid3-scroller']//div[@class='x-layer x-editor x-small-editor x-grid-editor'][1]//input
Но проблема обнаружилась в том, что если в разной последовательности эти элементы подгружаются в код, то и очередность у них разная. Сейчас например div id="ext-comp-1026", в котором находится нужный input стоит первым, но может быть и вторым, если он подгрузился в код вторым. И в тесте происходит ошибка, потому что нужные данные не туда вводятся.
Помогите, пожалуйста, разобраться с этим
  • 0

#2 vaha

vaha

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

  • Members
  • Pip
  • 22 сообщений
  • ФИО:Илья

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

Забить на порядок инпутов и выбирать между ними двумя по атрибуту type, м?
  • 0

#3 ekulgavaya

ekulgavaya

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

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


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

Здравствуйте.

Привяжитесь к атрибуту type

"xpath=//input[@type='text']"
"css=input[type=text]"


"xpath=//input[@type='password']"
"css=input[type=password]"

Если больше элементов с таким значением атрибута, то скрипт выберет первое из них, либо можете добавить какого-нибудь уникального родителя в локатор.
  • 0
In God we trust, the rest we test.

#4 Jenka156

Jenka156

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

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


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

ааа, простите, забыла сказать... я в примере привела не все инпуты, там их больше. вот так выглядит полная картина:

<div class="x-layer x-editor x-small-editor x-grid-editor" id="ext-comp-1026" style="overflow: auto; position: absolute; z-index: 11000; visibility: visible; left: 534px; top: 22px;">
<input type="text" name="" id="ext-comp-1025" autocomplete="off" size="20" class="x-form-text x-form-field" style="width: 632px; height: 16px;">
</div>
<div class="x-layer x-editor x-small-editor x-grid-editor" id="ext-comp-1036" style="overflow: auto; position: absolute; z-index: 11000; visibility: hidden; left: -10000px; top: -10000px;">
<input type="password" name="" id="ext-comp-1035" autocomplete="off" size="20" class="x-form-text x-form-field" style="width: 331px; height: 16px;">
</div>
<div class="x-layer x-editor x-small-editor x-grid-editor" id="ext-comp-1028" style="overflow: auto; position: absolute; z-index: 11000; visibility: hidden; left: -10000px; top: -10000px;">
<input type="text" name="" id="ext-comp-1027" autocomplete="off" size="20" class="x-form-text x-form-field" style="text-align: left; width: 331px; height: 16px;">
</div>
<div class="x-layer x-editor x-small-editor x-grid-editor" id="ext-comp-1038" style="overflow: auto; position: absolute; z-index: 11000; visibility: hidden; left: -10000px; top: -10000px;">
<input type="text" name="" id="ext-comp-1037" autocomplete="off" size="20" class="x-form-text x-form-field" style="width: 331px; height: 16px;">
</div>
<div class="x-layer x-editor x-small-editor x-grid-editor" id="ext-comp-1040" style="overflow: auto; position: absolute; z-index: 11000; visibility: hidden; left: -10000px; top: -10000px;">
<input type="text" name="" id="ext-comp-1039" autocomplete="off" size="20" class="x-form-text x-form-field" style="width: 331px; height: 16px;">
</div>
<div class="x-layer x-editor x-small-editor x-grid-editor" id="ext-comp-1040" style="overflow: auto; position: absolute; z-index: 11000; visibility: hidden; left: -10000px; top: -10000px;">
<input type="text" name="" id="ext-comp-1039" autocomplete="off" size="20" class="x-form-text x-form-field x-form-num-field" style="text-align: left; width: 331px; height: 16px;">
</div>
<div class="x-layer x-editor x-small-editor x-grid-editor" id="ext-comp-1030" style="overflow: auto; position: absolute; z-index: 11000; visibility: hidden; left: -10000px; top: -10000px;">
<input type="text" name="" id="ext-comp-1029" autocomplete="off" size="20" class="x-form-text x-form-field x-form-num-field" style="text-align: left; width: 331px; height: 16px;">
</div>

Вот например 2 последних инпута отвечают за домашний (id="ext-comp-1039") и рабочий (id="ext-comp-1029") телефоны. Сейчас они расположены в коде друг за другом, потому что нажатия проводились последовательно сначала на поле домашнего телефона, потом на поле рабочего телефона. Но если сделать наоборот, то в коде сначала будет id="ext-comp-1029", а потом id="ext-comp-1039". Вот пример

<div class="x-layer x-editor x-small-editor x-grid-editor" id="ext-comp-1030" style="overflow: auto; position: absolute; z-index: 11000; visibility: hidden; left: -10000px; top: -10000px;">
<input type="text" name="" id="ext-comp-1029" autocomplete="off" size="20" class="x-form-text x-form-field x-form-num-field" style="text-align: left; width: 331px; height: 16px;">
</div>
<div class="x-layer x-editor x-small-editor x-grid-editor" id="ext-comp-1040" style="overflow: auto; position: absolute; z-index: 11000; visibility: hidden; left: -10000px; top: -10000px;">
<input type="text" name="" id="ext-comp-1039" autocomplete="off" size="20" class="x-form-text x-form-field x-form-num-field" style="text-align: left; width: 331px; height: 16px;">
</div>

Родители у них одинаковые (все атрибуты одинаковые), а следующий родитель общий идет. Получается что они различаются только айдишниками, которые постоянно меняются при перезагрузке страницы
  • 0

#5 ekulgavaya

ekulgavaya

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

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


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

Ну в принципе я бы в этой ситуации пошла и пнула девелопера, чтобы привязали нормальные айдишки, или name -ы.

Однако мне также представляется возможным следующее решение:
Не может же быть просто на скрине 7 инпутов, к ним должны быть подписи, или какие-либо другие опознавательные знаки. Можно попробовать через них как-то достучаться.
  • 0
In God we trust, the rest we test.

#6 499356863

499356863

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

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

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

Если чать идентификатора ext-comp- статичная а цифры в конце всегда разные то рекомендую использовать регулярные выражения
  • 0

#7 alena b

alena b

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

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

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

Тогда привяжитесь к тексту. Там наверняка каждому инпуту соответствует какой-нибудь <span>Password</span>
  • 0


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

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