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

Фотография

как сделать multy select


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

#1 phunq

phunq

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

  • Members
  • Pip
  • 20 сообщений
  • ФИО:ВА

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

как сделать мультиселект в списке? имитации ctrl+mouseclick

нашел вот такой вариант

Actions builder = new Actions(wd);	
		   builder.keyDown(Keys.CONTROL)		   
	       .click(we1)
	       .click(we2)
	       .keyUp(Keys.CONTROL);
		 Action selectMultiple = builder.build();
		 selectMultiple.perform();

но он кидает ошибку(браузер firefox 3.6):

Exception in thread "main" org.openqa.selenium.UnsupportedCommandException: Unrecognized command: POST /session/a1fc9df8-b46d-48da-8bb8-3f39cddbaf0a/modifier
Build info: version: '2.4.0', revision: '13337', time: '2011-08-12 09:58:05'
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_26'
Driver info: driver.version: RemoteWebDriver
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:131)
	at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:105)
	at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:407)
	at org.openqa.selenium.remote.RemoteWebDriver$RemoteKeyboard.pressKey(RemoteWebDriver.java:642)
	at org.openqa.selenium.interactions.KeyDownAction.perform(KeyDownAction.java:40)
	at org.openqa.selenium.interactions.CompositeAction.perform(CompositeAction.java:31)

видимо чтото опять недопилено для фаерфокса - несмотря на выход финальной версии
какие есть еще варианты?
  • 0

#2 stmark

stmark

    Опытный участник

  • Members
  • PipPipPipPip
  • 404 сообщений
  • ФИО:Докучаев Сергей
  • Город:Ярославль


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

А разве стандартный метод не подходит?
addSelection (locator,optionLocator)

  • 0

#3 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


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

Select mySelect = new Select(driver.findElement(By.name("my-select")));

		mySelect.selectByValue("val1");

		mySelect.selectByValue("val2");

  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#4 phunq

phunq

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

  • Members
  • Pip
  • 20 сообщений
  • ФИО:ВА

Отправлено 02 сентября 2011 - 10:13

слегка продолжим тему

а как сделать если список из себя представляет специфическую конструкцию?
если схемотично изобразить - то как то вот так:

div[
table[
tr[td[span]]]
tr[td[span]]]
tr[td[span]]]
tr[td[span]]]
tr[td[span]]]
]

т.е. здесь нельзя сделать mySelect.selectByValue("val1");
потому что нет value

ну а конструкция обрисованнаяч в первом посте по прежнемы выкидывает UnsupportedCommandException
  • 0

#5 grasshopper

grasshopper

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

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

Отправлено 05 сентября 2011 - 21:38

как сделать мультиселект в списке? имитации ctrl+mouseclick

нашел вот такой вариант

Actions builder = new Actions(wd);	
		   builder.keyDown(Keys.CONTROL)		   
	       .click(we1)
	       .click(we2)
	       .keyUp(Keys.CONTROL);
		 Action selectMultiple = builder.build();
		 selectMultiple.perform();

но он кидает ошибку(браузер firefox 3.6):

Exception in thread "main" org.openqa.selenium.UnsupportedCommandException: Unrecognized command: POST /session/a1fc9df8-b46d-48da-8bb8-3f39cddbaf0a/modifier
Build info: version: '2.4.0', revision: '13337', time: '2011-08-12 09:58:05'
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_26'
Driver info: driver.version: RemoteWebDriver
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:131)
	at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:105)
	at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:407)
	at org.openqa.selenium.remote.RemoteWebDriver$RemoteKeyboard.pressKey(RemoteWebDriver.java:642)
	at org.openqa.selenium.interactions.KeyDownAction.perform(KeyDownAction.java:40)
	at org.openqa.selenium.interactions.CompositeAction.perform(CompositeAction.java:31)

видимо чтото опять недопилено для фаерфокса - несмотря на выход финальной версии
какие есть еще варианты?

Может вариант и глупы, но тем не менее
1. Проверить срабатывает ли одиночный клик в селениум рс. (click(we1)). Если не срабатывает, то для нахождения элемента юзаем xpath
2. Насколько я понимаю последовательность нажатий немного другое
клик на первый элемент, контрол нажали, клик на второй элемент, контрол отжали. Попробуйте
3. Клики попробовать заменить на маус даун , маус ап :)
  • 0

#6 phunq

phunq

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

  • Members
  • Pip
  • 20 сообщений
  • ФИО:ВА

Отправлено 06 сентября 2011 - 07:35

как выясняется оно падает на такой операции

builder.keyDown(Keys.CONTROL).build().perform();

с такой ошибкой

Exception in thread "main" org.openqa.selenium.UnsupportedCommandException: Unrecognized command: POST /session/f1ddca54-3c28-4003-9304-f0739de604d7/modifier
Build info: version: '2.4.0', revision: '13337', time: '2011-08-12 09:58:05'
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_26'
Driver info: driver.version: RemoteWebDriver
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:131)
	at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:105)
	at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:407)
	at org.openqa.selenium.remote.RemoteWebDriver$RemoteKeyboard.pressKey(RemoteWebDriver.java:642)
	at org.openqa.selenium.interactions.KeyDownAction.perform(KeyDownAction.java:40)
	at org.openqa.selenium.interactions.CompositeAction.perform(CompositeAction.java:31)

  • 0

#7 phunq

phunq

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

  • Members
  • Pip
  • 20 сообщений
  • ФИО:ВА

Отправлено 06 сентября 2011 - 08:55

дополнительные исследование показали что код

                Actions builder = new Actions(wd);      
                   builder.keyDown(Keys.CONTROL)                   
               .click(we1)
               .click(we2)
               .keyUp(Keys.CONTROL);
                 Action selectMultiple = builder.build();
                 selectMultiple.perform();


в IE8 не скидывает эксепшена - но и к эффекту мультиселекта не приводит
  • 0

#8 grasshopper

grasshopper

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

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

Отправлено 07 сентября 2011 - 11:56

Вот что работает для трех браузеров (проверял на трех для ие, фаерфокс и хром) у меня
selenium.addSelection("rules[0][verbs][]", "label=comment");
Thread.sleep(1000);
selenium.controlKeyDown();
selenium.addSelection("rules[0][verbs][]", "label=deposit");
Thread.sleep(1000);
selenium.controlKeyUp();
Возможно клик нельзя использовать в промежутке между контрол вниз, контрол вверх.
  • 0

#9 phunq

phunq

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

  • Members
  • Pip
  • 20 сообщений
  • ФИО:ВА

Отправлено 08 сентября 2011 - 11:27

ну Ваш код использет селениум первой версии, возможно все так

я использовал вторую версию
и там для фаерфокса явно не реализованы keyup, keydown

в принципе можно испольтзовать вызовы первой версии
а что означают здесь параметры метода addSelection ?
  • 0

#10 grasshopper

grasshopper

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

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

Отправлено 08 сентября 2011 - 13:19

ну Ваш код использет селениум первой версии, возможно все так

я использовал вторую версию
и там для фаерфокса явно не реализованы keyup, keydown

в принципе можно испольтзовать вызовы первой версии
а что означают здесь параметры метода addSelection ?

Я использую второй. selenium-java-2.0b2.
Смотри атач. Первый параметр это имя select, второй value
  • 0

#11 grasshopper

grasshopper

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

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

Отправлено 08 сентября 2011 - 13:21

ну Ваш код использет селениум первой версии, возможно все так

я использовал вторую версию
и там для фаерфокса явно не реализованы keyup, keydown

в принципе можно испольтзовать вызовы первой версии
а что означают здесь параметры метода addSelection ?

Я использую второй. selenium-java-2.0b2.
Смотри атач. Первый параметр это имя select, второй value

Прикрепленные файлы

  • Прикрепленный файл  Example.JPG   59,69К   9 Количество загрузок:

  • 0

#12 phunq

phunq

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

  • Members
  • Pip
  • 20 сообщений
  • ФИО:ВА

Отправлено 09 сентября 2011 - 11:49

ну для второго код приводил Алексей

Select mySelect = new Select(driver.findElement(By.name("my-select")));
                mySelect.selectByValue("val1");
                mySelect.selectByValue("val2");

этот код навел меня на мысль на использование первой версии или по крайней мере вызовов команд первой из второй

selenium.addSelection("rules[0][verbs][]", "label=comment");
 Thread.sleep(1000);
 selenium.controlKeyDown();
 selenium.addSelection("rules[0][verbs][]", "label=deposit");
 Thread.sleep(1000);
 selenium.controlKeyUp();

но проблема в то что использовать класс Select можно только при наличии тега <select>
иначе экземпляр класса select просто не создать

в моем же случае нет тега select есть только

div[
table[
tr[td[span]]]
tr[td[span]]]
tr[td[span]]]
tr[td[span]]]
tr[td[span]]]
]

здесь нет ни аттрибута value, ни <select>, чтобы можно было выбирать по хотя бы индексу
селениум не видит здесь списка, поэтому я и пытался имитировать работу с ctrl+click shift+click

приложил картинку с кодом страницы

Прикрепленные файлы


  • 0

#13 grasshopper

grasshopper

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

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

Отправлено 09 сентября 2011 - 17:36

ну для второго код приводил Алексей

Select mySelect = new Select(driver.findElement(By.name("my-select")));
                mySelect.selectByValue("val1");
                mySelect.selectByValue("val2");

этот код навел меня на мысль на использование первой версии или по крайней мере вызовов команд первой из второй

selenium.addSelection("rules[0][verbs][]", "label=comment");
 Thread.sleep(1000);
 selenium.controlKeyDown();
 selenium.addSelection("rules[0][verbs][]", "label=deposit");
 Thread.sleep(1000);
 selenium.controlKeyUp();

но проблема в то что использовать класс Select можно только при наличии тега <select>
иначе экземпляр класса select просто не создать

в моем же случае нет тега select есть только

div[
table[
tr[td[span]]]
tr[td[span]]]
tr[td[span]]]
tr[td[span]]]
tr[td[span]]]
]

здесь нет ни аттрибута value, ни <select>, чтобы можно было выбирать по хотя бы индексу
селениум не видит здесь списка, поэтому я и пытался имитировать работу с ctrl+click shift+click

приложил картинку с кодом страницы


Такая строчка работает у меня
selenium.addSelection("//select[@class='multi']", "index=2");
Вы можете использовать xpath и id в комбинации с нажатием на контрол
selenium.addSelection("your XPATH", "id=");
  • 0

#14 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 10 сентября 2011 - 09:07


ну Ваш код использет селениум первой версии, возможно все так

Я использую второй. selenium-java-2.0b2.

Раз селениум, два селениум
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#15 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 10 сентября 2011 - 09:11

но проблема в то что использовать класс Select можно только при наличии тега <select>
иначе экземпляр класса select просто не создать

в моем же случае нет тега select есть только

div[
table[
tr[td[span]]]
tr[td[span]]]
tr[td[span]]]
tr[td[span]]]
tr[td[span]]]
]

Совершенно верно, здесь класс Select не поможет.
Какой JS-движок используется на сайте? Есть где-нибудь публично доступный пример списка, аналогичного Вашему?
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#16 phunq

phunq

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

  • Members
  • Pip
  • 20 сообщений
  • ФИО:ВА

Отправлено 13 сентября 2011 - 10:45

да похоже что самописный движок - единственно пока что могу показать это тот скриншот...
  • 0


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

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