Не удается найти text_field с динамическим идентификатором

<div id="temp_1333021214801"> 
    <input type="text"/> 
</div>

$browser.text_field(:xpath,".//*[@id='temp_1333018770709']/input").set("apple")

Я получаю сообщение об ошибке «невозможно найти элемент», потому что идентификатор динамически меняется.

Пожалуйста, помогите мне установить текст в текстовом поле.


person user1302404    schedule 30.03.2012    source источник
comment
Вы должны предоставить нам HTML-код страницы и более подробную информацию о том, какие локаторы для этого элемента являются статическими, а какие динамическими. Ссылка на сайт была бы идеальной.   -  person adam reed    schedule 30.03.2012
comment
Ваш мой HTML-код не показывает HTML. Все, что у нас есть, это ваш код Ruby. Отсутствие HTML для такого рода проблем заставляет меня плакать, тогда моя девушка должна утешать меня, это может стать грязным, и иногда я пропускаю ужин. Пожалуйста, ради моего питания.   -  person kinofrost    schedule 30.03.2012
comment
ПОКАЖИТЕ нам свой HTML-код с веб-страницы, которую вы пытаетесь автоматизировать. Прекратите использовать xpath, если только это не единственный способ. Также я не вижу здесь ничего, связанного с огурцом, почему это даже в заголовке и как это связано с вашей проблемой?   -  person Chuck van der Linden    schedule 30.03.2012
comment
Вам нужно предоставить нам больше HTML, чем просто один элемент (с нестатическим идентификатором), который вы пытаетесь идентифицировать. Мы хотим помочь вам, но вы ДОЛЖНЫ дать нам достаточно для работы, чтобы мы могли это сделать. Достаточно, чтобы мы могли найти какой-то шаблон относительно какой-то другой вещи вокруг или рядом с нужным вам элементом div, который был бы предсказуемым (например, заголовок или метка для поля?). HTML для всей формы, частью которой является поле. быть лучшим.   -  person Chuck van der Linden    schedule 03.04.2012


Ответы (2)


Похоже, что ваш динамический идентификатор temp_, поэтому это должно сделать это с учетом приведенной выше информации:

browser.div(:id, /temp_\d+/).text_field.set 'something'

Проблемы с моим решением заключаются в том, что оно предполагает, что id всегда будет temp_ regex, соответствующим любому числу, установленному последовательно, что, похоже, имеет место в вашем примере выше. Кроме того, предполагается, что в DOM этой страницы нет другой комбинации div(:id, /temp_\d+/), что, скорее всего, не должно быть проблемой.

person alp2012    schedule 19.08.2013

Если у вас есть динамические идентификаторы, я могу предложить следующее:

  1. Код для подсчета объектов. Например

    $browser.text_field(:index => 2)

    дает третье text_field на странице.

  2. Кодируйте то, что находится вокруг вещи, которую вы пытаетесь найти.

    $browser.div(:name => 'mydiv').text_field(:index=>2)

    дает третье текстовое поле в div под названием «mydiv».

ТЕМ НЕ МЕНИЕ

Если ваш внешний интерфейс не поддается тестированию таким образом, я настоятельно рекомендую вам в первую очередь уделить время тому, чтобы подумать о своей приверженности автоматизированному тестированию. Любое незначительное изменение в программном обеспечении заставит вас работать до 9 вечера, дергать за волосы и раскачиваться взад-вперед, пока вы обновляете все свои сценарии, поэтому, если обслуживание кода не является вашим хобби на выходных, подумайте о полуавтоматизации, исследовательском тестировании или ручных сценариях. Поговорите с разработчиками (кто бы это ни был. Это можете быть вы!) или с высшим руководством (если это тоже не вы), чтобы узнать, можно ли сделать его более тестируемым. Также не используйте xpaths, если вы не получаете от этого особого удовольствия.

Надеюсь, это было полезно, я не могу сделать ничего конкретного без исходного HTML.

person kinofrost    schedule 30.03.2012
comment
хорошая попытка дать общий ответ, учитывая, что нам не хватает информации, которая нам действительно нужна (образец html), чтобы дать конкретный ответ - person Chuck van der Linden; 30.03.2012