Ext JS скрывает содержимое текстового поля из HTML и Selenium - PullRequest
0 голосов
/ 01 сентября 2011

Я писал тестирование автоматизации (в Selenium2 Java, Firefox 3.6) приложения, которое использует большое количество ExtJS.Мне удалось обойти мощные идентификаторы морфируемых элементов, но на одной странице поведение кода поставило меня в тупик.Существует текстовое поле, в котором можно указать имя пользователя.Он не кликабелен, пока не нажата кнопка редактирования, а затем Firebug может найти текстовое поле.Если текст введен, а затем сохранен, текст отображается на странице, но не отображается нигде в HTML-коде.Даже если нажать кнопку редактирования еще раз, чтобы сделать текстовое поле доступным, я не могу получить значение текстового поля.Это код для метки и текстового поля в режиме редактирования:

<div class="x-form-item " tabindex="-1">
<label class="x-form-item-label" style="width: 250px;" for="ext-comp-1022">Interface Username:</label>
<div id="x-form-el-ext-comp-1022" class="x-form-element" style="padding-left: 255px;">
<input id="ext-comp-1022" class=" x-form-text x-form-field " type="text" name="interfaceUsername" autocomplete="off" size="20" style="width: 292px;">
</div>

Обратите внимание, что метка «Имя пользователя:» отображается в HTML должным образом, но для самого текстового поля ничего нет.Я подозреваю, что вызов javascript получает и отображает текст в текстовом поле, но я совсем не знаком с ExtJS.Я проверил этот пост , но это не относится к получению текста, в основном только к проблеме смены идентификатора.Итак, я хотел бы понять, как выяснить, какой скрипт вызывается, и как использовать executeScript для захвата текста текстового поля вместе с ним.Я могу вводить текст в поле с помощью Selenium, сохранять его с помощью Selenium и видеть его на странице в виде глазного яблока, поэтому у меня не возникает проблем с самим кодом Selenium, определяющим местонахождение элемента.

Спасибо,Сабрина

Ответы [ 2 ]

1 голос
/ 06 сентября 2011

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

String userid=driver.findElementByName("interfaceUsername").getAttribute("id");
String username=(String)js.executeScript("return Ext.getCmp('"+userid+"').getValue()");

С именем элемента, который я получаюидентификатор (что бы это ни было в тот день), а затем я вызываю executeScript, чтобы выяснить, каково значение текстового поля.Ему не хватает элегантности, но тогда ExtJS не продвигает элегантность.

0 голосов
/ 03 сентября 2011

Должен быть атрибут значения для имени пользователя поля. Поэтому в firebug выберите поле «Имя пользователя» и с правой стороны выберите опцию DOM. Должен быть атрибут value, который имеет имя пользователя. Попробуйте что-то вроде ниже, скажем, ваш WebElement это имя пользователя.

String user = username.getAttribute("value");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...