Работа с диалоговыми окнами в Selenium
#1
Отправлено 27 июля 2010 - 09:32
RenderedWebElement placeBetLink = waitForElement(By.xpath("//input[@value='Bet Now']"), "Can't find place bet button");
placeBetLink.click()
после click() дальше выполнение не идет, потому что выскакивает диалоговое окошко с да и нет - я так понимаю нужно как то нажать, чтоб команда завершилась.
Заранее благодарен!
#2
Отправлено 27 июля 2010 - 09:50
Была похожая ситуация тут:
http://software-test...amp;#entry61703
#3
Отправлено 27 июля 2010 - 14:15
Используй native методы для нажатия на кнопку окошка.
Была похожая ситуация тут:
http://software-test...amp;#entry61703
Дело в том, что я не могу понять как мне выполнить например эту команду selenium.keyPressNative(59). Потому что я не могу понять, куда мне ее написать, если я ее вставлю после click() то до нее просто не дойдет выполнение, потому что процесс зависнет на click() ожидая какого то действия....разъясните мне плиз эту ситуацию...я наверное просто не все понимаю и знаю.
Спасибо!
#4
Отправлено 27 июля 2010 - 14:27
Дело в том, что я не могу понять как мне выполнить например эту команду selenium.keyPressNative(59). Потому что я не могу понять, куда мне ее написать, если я ее вставлю после click() то до нее просто не дойдет выполнение, потому что процесс зависнет на click() ожидая какого то действия....разъясните мне плиз эту ситуацию...я наверное просто не все понимаю и знаю.
Вместо click.
click не увидит данное окно. Вместо нее вы используете нажатие кнопки нативным методом.
#5
Отправлено 28 июля 2010 - 08:15
Дело в том, что я не могу понять как мне выполнить например эту команду selenium.keyPressNative(59). Потому что я не могу понять, куда мне ее написать, если я ее вставлю после click() то до нее просто не дойдет выполнение, потому что процесс зависнет на click() ожидая какого то действия....разъясните мне плиз эту ситуацию...я наверное просто не все понимаю и знаю.
Вместо click.
click не увидит данное окно. Вместо нее вы используете нажатие кнопки нативным методом.
но ведь клик я делаю по урлу по сути (<a>) ну или кнопка в форме (<input>)? Или это не играет роли?
#6
Отправлено 28 июля 2010 - 09:19
Если да, тогда делайте клик по урлу и после него поставьте небольшую задержку (для того чтобы окно догрузилось), например Thread.sleep (если используете java), и далее нажимайте на кнопку в открывшемся окне с помощью нативного метода.
#7
Отправлено 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() или что то типа такого.
#8
Отправлено 30 июля 2010 - 07:47
#9
Отправлено 30 июля 2010 - 10:29
Thread.sleep() -по сути таймаут и выполнится независимо от того появилось окно с "да" "нет". нужно для того, что бы дать возможность этому окну появится, а потом уже selenium.keyPressNative(Integer.toString(KeyEvent.VK_ENTER)) нативно жмёт на Enter(если конечно нужен Enter). только надо убедиться что фокус находится на нужной кнопке
Объясню ситуацию немного подругому, если запустить в дебаггере и поставить breakpoint на команде Thread.sleep(100), которая идет после clcik() то в ДЕБАГГЕ остановится на breakpoint только после того как я нажму мышкой (вручную, принудительно) на да или нет на форме. А пока я мышкой ничего не нажму то Thread.sleep(100) не выполняется, до нее просто не доходит выпонение, пока вручную не закроется диалоговое окошко
#10
Отправлено 04 августа 2010 - 11:06
Такого не может быть: Thread.sleep выполянется всегда, в независимости появлется какое-нибуде окошко или нет, это не селениумовский метод, ему не нужно дожидаться окночания выполнения педыдущей операции. Какую задержку вы ставите для ожидания для появления окна ( сколько миллисекунд)?А пока я мышкой ничего не нажму то Thread.sleep(100) не выполняется, до нее просто не доходит выпонение, пока вручную не закроется диалоговое окошко
Вот пример из моего проекта:
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();
#11
Отправлено 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();
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium
#12
Отправлено 11 августа 2010 - 18:47
selenium.chooseOkOnNextConfirmation() selenium.click("yourButton")
попробуйте это, если я правильно вас понял.
#13
Отправлено 11 августа 2010 - 20:47
Судя по использованию RenderedWebElement, товарищ, который задавал вопрос, работает с Selenium 2.0 (а может быть даже с чистым WebDriver), поэтому ему Ваш способ скорее всего не подойдёт, увы.selenium.chooseOkOnNextConfirmation() selenium.click("yourButton")
попробуйте это, если я правильно вас понял.
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium
#14
Отправлено 13 августа 2010 - 17:09
Судя по использованию RenderedWebElement, товарищ, который задавал вопрос, работает с Selenium 2.0 (а может быть даже с чистым WebDriver), поэтому ему Ваш способ скорее всего не подойдёт, увы.
возможно вы правы, я еще ни разу не использовал selenium 2.0
#15
Отправлено 30 декабря 2016 - 18:10
Добрый вечер.Адаптировал тесты с хромовского драйвера на phantomjs (java), упёрся в проблему с confirm`ом. Ни в какую не хочет он у меня нажиматься. На хрому было реализовано через
robot.keyPress(KeyEvent.VK_ENTER);
Пробовал делать через алерт:
((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; };");
Ни к какому видимому результату это не привело.
#16
Отправлено 30 декабря 2016 - 19:22
и да,
phantomjs 2.1.1
selenium 2.53.1
phantomjsdriver 1.2.0 (com.github.detro)
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных