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

Фотография

Работа с диалоговыми окнами в Selenium


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

#1 alex_neon

alex_neon

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

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

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

Добрый день, форумчане. Помогите пожалуйста, уже голову сломал - как можно нажать на кнопку OK в выпадающем диалоговом окне (Firefox). После нажати на кнопку

RenderedWebElement placeBetLink = waitForElement(By.xpath("//input[@value='Bet Now']"), "Can't find place bet button");
placeBetLink.click()

после click() дальше выполнение не идет, потому что выскакивает диалоговое окошко с да и нет - я так понимаю нужно как то нажать, чтоб команда завершилась.

Заранее благодарен!
  • 0

#2 hachapuri

hachapuri

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

  • Members
  • Pip
  • 40 сообщений
  • ФИО:Сиробаба Александр Эдуардович

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

Используй native методы для нажатия на кнопку окошка.
Была похожая ситуация тут:
http://software-test...amp;#entry61703
  • 0

#3 alex_neon

alex_neon

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

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

Отправлено 27 июля 2010 - 14:15

Используй native методы для нажатия на кнопку окошка.
Была похожая ситуация тут:
http://software-test...amp;#entry61703


Дело в том, что я не могу понять как мне выполнить например эту команду selenium.keyPressNative(59). Потому что я не могу понять, куда мне ее написать, если я ее вставлю после click() то до нее просто не дойдет выполнение, потому что процесс зависнет на click() ожидая какого то действия....разъясните мне плиз эту ситуацию...я наверное просто не все понимаю и знаю.

Спасибо!
  • 0

#4 mcreature

mcreature

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

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

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

Дело в том, что я не могу понять как мне выполнить например эту команду selenium.keyPressNative(59). Потому что я не могу понять, куда мне ее написать, если я ее вставлю после click() то до нее просто не дойдет выполнение, потому что процесс зависнет на click() ожидая какого то действия....разъясните мне плиз эту ситуацию...я наверное просто не все понимаю и знаю.


Вместо click.
click не увидит данное окно. Вместо нее вы используете нажатие кнопки нативным методом.
  • 0

#5 alex_neon

alex_neon

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

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

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

Дело в том, что я не могу понять как мне выполнить например эту команду selenium.keyPressNative(59). Потому что я не могу понять, куда мне ее написать, если я ее вставлю после click() то до нее просто не дойдет выполнение, потому что процесс зависнет на click() ожидая какого то действия....разъясните мне плиз эту ситуацию...я наверное просто не все понимаю и знаю.


Вместо click.
click не увидит данное окно. Вместо нее вы используете нажатие кнопки нативным методом.


но ведь клик я делаю по урлу по сути (<a>) ну или кнопка в форме (<input>)? Или это не играет роли?
  • 0

#6 mcreature

mcreature

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

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

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

Вы кликаете по урлу на странице, тем самым вызывая открытие окна, в котором надо нажать на кнопку ОК?
Если да, тогда делайте клик по урлу и после него поставьте небольшую задержку (для того чтобы окно догрузилось), например Thread.sleep (если используете java), и далее нажимайте на кнопку в открывшемся окне с помощью нативного метода.
  • 0

#7 alex_neon

alex_neon

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

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

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

Вы кликаете по урлу на странице, тем самым вызывая открытие окна, в котором надо нажать на кнопку ОК?
Если да, тогда делайте клик по урлу и после него поставьте небольшую задержку (для того чтобы окно догрузилось), например Thread.sleep (если используете java), и далее нажимайте на кнопку в открывшемся окне с помощью нативного метода.


Извините, если я неправильно как то формирую свой вопрос, но попробую еще раз:

я выполняю команду
RenderedWebElement placeBetLink = waitForElement(By.xpath("//input[@value='Bet Now']"), "Can't find place bet button");
placeBetLink.click();

после открывается диалоговое окно (в том же окне браузера - без открытия нового окна браузера) в котором две кнопки "Да" и "Нет"
И все - мы чегото ждем, т.е если я после placeBetLink.click(); расположу команду Thread.sleep(1000); то она выполнится только после нажатия в этом диалоговом окне "Да" или "Нет". Т.е здесь уже похоже на какуюто систему событий и на методы onReturnRequest() или что то типа такого.
  • 0

#8 horhe

horhe

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

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

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

Thread.sleep() -по сути таймаут и выполнится независимо от того появилось окно с "да" "нет". нужно для того, что бы дать возможность этому окну появится, а потом уже selenium.keyPressNative(Integer.toString(KeyEvent.VK_ENTER)) нативно жмёт на Enter(если конечно нужен Enter). только надо убедиться что фокус находится на нужной кнопке
  • 0
Piobaireachd isn't mysterious, difficult or hard - it's just music...

#9 alex_neon

alex_neon

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

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

Отправлено 30 июля 2010 - 10:29

Thread.sleep() -по сути таймаут и выполнится независимо от того появилось окно с "да" "нет". нужно для того, что бы дать возможность этому окну появится, а потом уже selenium.keyPressNative(Integer.toString(KeyEvent.VK_ENTER)) нативно жмёт на Enter(если конечно нужен Enter). только надо убедиться что фокус находится на нужной кнопке


Объясню ситуацию немного подругому, если запустить в дебаггере и поставить breakpoint на команде Thread.sleep(100), которая идет после clcik() то в ДЕБАГГЕ остановится на breakpoint только после того как я нажму мышкой (вручную, принудительно) на да или нет на форме. А пока я мышкой ничего не нажму то Thread.sleep(100) не выполняется, до нее просто не доходит выпонение, пока вручную не закроется диалоговое окошко
  • 0

#10 hachapuri

hachapuri

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

  • Members
  • Pip
  • 40 сообщений
  • ФИО:Сиробаба Александр Эдуардович

Отправлено 04 августа 2010 - 11:06

А пока я мышкой ничего не нажму то Thread.sleep(100) не выполняется, до нее просто не доходит выпонение, пока вручную не закроется диалоговое окошко

Такого не может быть: Thread.sleep выполянется всегда, в независимости появлется какое-нибуде окошко или нет, это не селениумовский метод, ему не нужно дожидаться окночания выполнения педыдущей операции. Какую задержку вы ставите для ожидания для появления окна ( сколько миллисекунд)?
Вот пример из моего проекта:
selenium.click("link=Download version 4.2.0");	Thread.sleep(3000);		selenium.keyPressNative(java.awt.event.KeyEvent.VK_TAB+ "");		Thread.sleep(500);		selenium.keyPressNative(java.awt.event.KeyEvent.VK_TAB+ "");		Thread.sleep(500);		selenium.keyPressNative(java.awt.event.KeyEvent.VK_TAB+ "");		Thread.sleep(500);		selenium.keyPressNative(java.awt.event.KeyEvent.VK_ENTER+ "");		Thread.sleep(500);		selenium.keyPressNative(java.awt.event.KeyEvent.VK_ENTER+ "");}	        selenium.windowFocus();

  • 0

#11 barancev

barancev

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

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


Отправлено 04 августа 2010 - 12:53

Thread dialogKiller = new Thread(new Runnable() {

			public void run() {

				// Wait 10 sec and press Enter

				Thread.sleep(10000);

				selenium.keyPressNative(Integer.toString(KeyEvent.VK_ENTER));

			}

		});

		dialogKiller.start()

		RenderedWebElement placeBetLink = waitForElement(By.xpath("//input[@value='Bet Now']"), "Can't find place bet button");

		placeBetLink.click();

		dialogKiller.join();

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

#12 contestar

contestar

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

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

Отправлено 11 августа 2010 - 18:47

selenium.chooseOkOnNextConfirmation()
selenium.click("yourButton")

попробуйте это, если я правильно вас понял.
  • 0

#13 barancev

barancev

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

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


Отправлено 11 августа 2010 - 20:47

selenium.chooseOkOnNextConfirmation()
selenium.click("yourButton")

попробуйте это, если я правильно вас понял.

Судя по использованию RenderedWebElement, товарищ, который задавал вопрос, работает с Selenium 2.0 (а может быть даже с чистым WebDriver), поэтому ему Ваш способ скорее всего не подойдёт, увы.
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#14 contestar

contestar

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

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

Отправлено 13 августа 2010 - 17:09

Судя по использованию RenderedWebElement, товарищ, который задавал вопрос, работает с Selenium 2.0 (а может быть даже с чистым WebDriver), поэтому ему Ваш способ скорее всего не подойдёт, увы.


возможно вы правы, я еще ни разу не использовал selenium 2.0
  • 0

#15 kashee

kashee

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

  • Members
  • Pip
  • 5 сообщений
  • ФИО:Mikhail

Отправлено 30 декабря 2016 - 18:10

Добрый вечер.Адаптировал тесты с хромовского драйвера на phantomjs (java), упёрся в проблему с confirm`ом. Ни в какую не хочет он у меня нажиматься. На хрому было реализовано через

robot.keyPress(KeyEvent.VK_ENTER);

 

Пробовал делать через алерт:

Alert alert = driver.switchTo().alert();
String textOnAlert = alert.getText();

 

alert.accept();
Получал ошибку, позже гугл подсказал, что с фантомом селениумовский алерт вообще не дружит.
 
Пробовал такое
((JavascriptExecutor)driver).executeScript("window.confirm = function(msg) { return accept; }");
((JavascriptExecutor)driver).executeScript("window.confirm = function(msg){ return true; };");
((JavascriptExecutor)driver).executeScript("window.alert = function(msg){ return; };");
Ни к какому видимому результату это не привело.
 
Может кто сталкивался, или есть идеи как решать подобное?

  • 0

#16 kashee

kashee

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

  • Members
  • Pip
  • 5 сообщений
  • ФИО:Mikhail

Отправлено 30 декабря 2016 - 19:22

и да,
phantomjs 2.1.1
selenium 2.53.1
phantomjsdriver 1.2.0 (com.github.detro)


  • 0


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

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