#watir #watir-webdriver
#watir #watir-webdriver
Вопрос:
Я использовал set
для вставки значения в текстовое поле под div.
Ниже приведен подход, который я использовал без успеха. Это единственный способ, которым я смог идентифицировать элемент. Когда я попытался идентифицировать текстовое поле по имени, оно не было распознано.
@browser.div(:evaluation, :id => "evaluation_form_attributes").text_field(:id => "evaluation_form_name")
@browser.set('Teacher Evaluation Form')
Была отображена следующая ошибка:
undefined method `set' for #<Watir::IE:0x4dd9348>
Это HTML:
div id="evaluation_form_attributes"
Вычислительное имя:
input id="evaluation_form_name" type="text" size="50" name="evaluation_form[name]" maxlength="30"
Комментарии:
1. Вы, наконец, смогли найти text_field?
Ответ №1:
Попробуй это:
browser.text_field(:id => "evaluation_form_name").set 'Teacher Evaluation Form'
Комментарии:
1. Спасибо за ваш быстрый ответ! Я пробовал этот метод раньше, но я получаю эту ошибку при попытке получить доступ к элементу Watir::Exception::UnknownObjectException: Не удается найти элемент, используя {:id=>»evaluation_form_name»}
2. убедитесь, что идентификатор написан правильно, а также выполните поиск в коде страницы, чтобы убедиться, что он уникален и не используется где-либо еще на странице. По стандартам HTML идентификаторы должны быть уникальными на странице. функции, которые пытаются идентифицировать с помощью значений ID, будут иметь тенденцию к сбою, поскольку страница нарушает стандарты HTML, а значения ID не уникальны
Ответ №2:
Возможно, задействован iframe? если вы знаете, что вещь там есть, и вы уверены в идентификаторе, а watir не может ее найти, то обычно это потому, что эта часть страницы находится внутри фрейма.
Для работы с элементами, которые находятся внутри фрейма, необходимо указать фрейм, затем элемент
browser.frame(:как, что).элемент(: как, что).метод и т.д.
смотрите http://wiki.openqa.org/display/WTR/Frames для получения дополнительной информации
Комментарии:
1. Итак, как вы можете перемещаться внутри iframe?
2. смотрите ссылку, которую я добавил к ответу, когда редактировал его только что. или Google, использующий такие термины, как: watir wiki frames
Ответ №3:
Чтобы задать значение для текстового поля, вам просто нужно найти его и установить. Часть настройки вы уже знаете ( set
), поэтому вам нужно связать что-то, что находит текстовое поле.
если ответ Zejiko не работает из-за «не удается найти элемент», то ошибка заключается не в настройке, а в поиске текстового поля. Используйте Firebug (в Firefox) или какой-нибудь DOM toolkit (Инструменты> Инструменты разработчика или F12 в IE8), чтобы найти текстовое поле и посмотреть, какие атрибуты у него есть.
Убедитесь, что идентификатор действительно "evaluation_form_name"
. Это чувствительно к регистру и к начальным / конечным пробелам. Вы могли бы попробовать следующее, чтобы расширить свой поиск:
@browser.text_field(:id => /evaluation/).set 'Teacher Evaluation Form'
Для идентификации идентификатора используется регулярное выражение. Вы можете выполнять поиск по многим параметрам, а не только по:id, и вы можете использовать более одного. Например:
@browser.text_field(:id => /eval/, :index => 2)
находит второе текстовое поле, идентификатор которого содержит «eval».
Что можно использовать для идентификации текстового поля, можно найти здесь: https://github.com/watir/watir/wiki/HTML-Elements-Supported-by-Watir
Комментарии:
1. Спасибо за ответы .. все еще не удалось идентифицировать текстовое поле по идентификатору или имени. Странно то, что я использую тот же метод для идентификации текстовых полей на других страницах, и он отлично работает.. только с этим у меня проблемы
2. Вы могли бы попробовать идентифицировать его только по индексу, чтобы посмотреть, можно ли его найти, или по какому-либо другому атрибуту. Если оно находится в форме, которая раньше вызывала проблемы, неизвестно, вызывает ли это до сих пор. Вы могли бы сначала идентифицировать контейнер (div), а затем использовать индекс внутри div (например, третье текстовое поле в div — это .div(:id=>’imadiv’).text_field(:index=>3) ). Если ничего из этого не работает, вам нужно опубликовать ссылку или какой-нибудь HTML-код, чтобы мы могли увидеть, как это выглядит, или, в противном случае, вы можете попробовать xpath! Также убедитесь, что это не проблема с синхронизацией (попытка найти текстовое поле до его существования)