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

Фотография

Selenium RC+Java vs. JavaScript


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

#1 dinas

dinas

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

  • Members
  • Pip
  • 52 сообщений
  • Город:Минск

Отправлено 08 июля 2010 - 17:00

Извиняюсь, если тема была. Поиск не дал результатов.

Суть такова. Есть выпадающий список, написаный на JavaScript. Так как там надо выбрать конкретный пункт, waitForCondition не подходит (если я правильно понял этот метод). Список выпадает на сочетание клавиш ALT+DOWN. Вобщим вот как я выкрутился:

selenium.focus("input_40");
selenium.altKeyDown();
selenium.keyPressNative("40");  //стрелочка вниз
selenium.keyPressNative("38");  //стрелочка вверх
selenium.keyPressNative("13");  //энтер
selenium.altKeyUp();

Итог: список открывается, выделение переходит на требуемый мне пункт, но энтер не жмется. Хотя Гугл категорически и утверждает мне, что keycode энтера "13", эклипс дал мне ERROR: Problem during keyDown: Invalid key code.

Вопрос №1. Почему не могу нажать энтер?
Вопрос №2. Как реализовать данное действо без таких извращений?
  • 0

#2 dinas

dinas

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

  • Members
  • Pip
  • 52 сообщений
  • Город:Минск

Отправлено 08 июля 2010 - 17:31

Выход из первого вопроса нашел сам:
Вместо
selenium.keyPressNative("13");
надо
import java.awt.event.KeyEvent;
selenium.keyPressNative(Integer.toString(KeyEvent.VK_ENTER));

Хотя попрежнему не понятно, почему код энтера "13" не подходит.
Ну и второй вопрос (самый главный) остается в силе.
  • 0

#3 contestar

contestar

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

  • Members
  • Pip
  • 36 сообщений
  • ФИО:Алексей

Отправлено 08 июля 2010 - 20:50

может не правильно вас понял, но для своих выпадающих списков использую:
selenium.mouseDownAt(locator, "")	//Раскрываем список
selenium.click(yourRequiredElement) //Кликаем на необходимый элемент в списке

  • 0

#4 enki86

enki86

    Постоянный участник

  • Members
  • PipPipPip
  • 231 сообщений


Отправлено 09 июля 2010 - 02:36

если список регагирует только на alt+keydown - иначе эмулировать никак (кстати, selenium.keyPressNative("13"); у меня работает нормально)
покажите код, ну или сами посмотрите как реализован выпадающий список
возможно, можно обойтись вызовом событий на этом элементе
  • 0

#5 horhe

horhe

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

  • Members
  • PipPip
  • 100 сообщений
  • ФИО:Юрко
  • Город:Kraków

Отправлено 09 июля 2010 - 06:39

попробуйте вместо "13" - "10" мне помогло в своё время.
  • 0
Piobaireachd isn't mysterious, difficult or hard - it's just music...

#6 dinas

dinas

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

  • Members
  • Pip
  • 52 сообщений
  • Город:Минск

Отправлено 09 июля 2010 - 06:41

Я пробывал selenium.select(); - не получается. Дело в том, что у самого списка идентификатор конечно есть, но вот то, что внутри списка в исходном коде выглядит в форме

o.displayList = '1 февраля,1 марта,1 апреля,1 мая,1 июня,1 июля,1 августа,1 сентября,1 октября,1 ноября,1 декабря,1 января';
И как мне достать отсюда 1 июля?.. :(
  • 0

#7 enki86

enki86

    Постоянный участник

  • Members
  • PipPipPip
  • 231 сообщений


Отправлено 09 июля 2010 - 07:18

так и будем по кусочку выкладывать? :angel:
то, что вы привели, реально никакой полезной информации не дает

Давайте так
код
что надо
  • 0

#8 Boltick

Boltick

    Специалист

  • Members
  • PipPipPipPipPip
  • 596 сообщений
  • ФИО:Алексей
  • Город:планета Земля

Отправлено 09 июля 2010 - 08:24

Выход из первого вопроса нашел сам:
Вместо

selenium.keyPressNative("13");
надо
import java.awt.event.KeyEvent;
selenium.keyPressNative(Integer.toString(KeyEvent.VK_ENTER));

Хотя попрежнему не понятно, почему код энтера "13" не подходит.
Ну и второй вопрос (самый главный) остается в силе.

На сколько я знаю, в зависимости от системы код ввода может быть 10 и 13. Это извечная проблема и путаница среди разных ОС. Есть символы перевода строки и возврата каретки: \n и \r
\n = 10
\r = 13

Вот.
  • 0
Алексей Булат
Про Тестинг

#9 dinas

dinas

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

  • Members
  • Pip
  • 52 сообщений
  • Город:Минск

Отправлено 09 июля 2010 - 09:40

Долго думал, как это показать код. Не всю же страницу исходного кода копипастить. Постарался найти самое главное, правда с функциями не заморачивался, посчитал это не сильно важным.
Код:

Само поле списка и кнопка открытия списка (можно делать и мышкой, не только alt+down, однако даже Selenium IDE не реагирует никак на клики по этим элементам):
<td style="white-space: nowrap;">

<input type="text" onchange="zenPage.getComponent(40).inputChangeHandler();" onblur="zenPage.getComponent(40).inputBlurHandler(event);" onkeydown="zenPage.getComponent(40).inputKeyHandler(event);" value="1 августа" id="input_40" readonly="" class="comboboxInput">	 //сам список

<img hspace="0" vspace="0" border="0" class="comboboxImgButton" onmouseout="zenPage.getComponent(40).comboboxMouseOut();" onmouseover="zenPage.getComponent(40).comboboxMouseOver();" onmouseup="zenPage.getComponent(40).comboboxButtonUp();" onmousedown="zenPage.getComponent(40).comboboxButtonDown(event);" id="btn_40" src="img/x.gif">   //кнопка открытия списка

</td>

Что происходит при выборе какого-либо пункта в списке:
<td align="right">
<div zen="25" id="btnView" class="zendiv"><input type="button" onclick="zenPage.getComponent(25).onclickHandler();" value="Отобразить" id="control_25" class="button">
</div>
</td>

Что надо сделать: Надо открыть список и выбрать там пункт. Далее нажать кнопку, но это уже не проблема.
  • 0

#10 Shelty

Shelty

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

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

Отправлено 09 июля 2010 - 12:42

а если selenium.select("listID", "label=name of label");
ну или selenium.isElementPresent("//option[@value='1']") - типа первый элемент списка?
  • 0

#11 dinas

dinas

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

  • Members
  • Pip
  • 52 сообщений
  • Город:Минск

Отправлено 09 июля 2010 - 12:48

Или не внимательно читаем, или я туплю слегка. Я же говорил про это :)

Я пробывал selenium.select(); - не получается. Дело в том, что у самого списка идентификатор конечно есть, но вот то, что внутри списка в исходном коде выглядит в форме

o.displayList = '1 февраля,1 марта,1 апреля,1 мая,1 июня,1 июля,1 августа,1 сентября,1 октября,1 ноября,1 декабря,1 января';
И как мне достать отсюда 1 июля?.. :(


  • 0

#12 Shelty

Shelty

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

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

Отправлено 09 июля 2010 - 12:59

:angel: Эт я туплю наверное.
Просто пока не представляю. '1 февраля,1 марта,1 апреля,1 мая,1 июня,1 июля,1 августа,1 сентября,1 октября,1 ноября,1 декабря,1 января' это все одна лейба? Как то же должны элементы списка различатся. Низя написать в лейбл = 1 июня?
Или нужно именно из вот этого длинного списка выцепить абстрактный i-тый лейбл?

value="Отобразить"
Это не Value элемента списка?
  • 0

#13 dinas

dinas

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

  • Members
  • Pip
  • 52 сообщений
  • Город:Минск

Отправлено 09 июля 2010 - 13:11

Суть в JavaScript. Нажатие по кнопке открытия списка активирует функцию, которая отображает сам список. Нажатие в списке активирует функцию выбора из списка. Вот:

onmouseout="zenPage.getComponent(40).comboboxMouseOut();" onmouseover="zenPage.getComponent(40).comboboxMouseOver();" onmouseup="zenPage.getComponent(40).comboboxButtonUp();" onmousedown="zenPage.getComponent(40).comboboxButtonDown(event)

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

По-моему, я начинаю повторяться с начала топика :)
  • 0

#14 mcreature

mcreature

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

  • Members
  • PipPip
  • 88 сообщений

Отправлено 09 июля 2010 - 13:22

Может попробовать открыть список и потом написать в поле?
Вроде я так решал подобную проблему...
  • 0

#15 dinas

dinas

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

  • Members
  • Pip
  • 52 сообщений
  • Город:Минск

Отправлено 09 июля 2010 - 13:26

Нельзя. Когда список открывается писать попрежнему нельзя.
Но я же решил проблему в принципе. Вопрос в том как решить ее без таких извращений, как мой способ (да и ваш, mcreature, посути тоже :), работая непосредственно с JavaScript.
  • 0


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

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