В окнах alert не могу нажать Ok
#1
Отправлено 23 января 2009 - 09:24
Ситуация такая: При нажатии кнопки сохранить, алертом выдается сообщение: Ваше сообщение сохранено. Мне для дальнейшего выполнения скрипта теста, нужно нажать Ok чтоб оно закрылось. Если знаете как поступить - напишите.
Спасибо.
#2
Отправлено 23 января 2009 - 10:46
А может и getAlert вызывать обращаясь к объекту селениума? Например,Пишу на ПХП. Пыталась сделать конструкцию вида if $this->selenium->isAlertPresent() {getAlert( );};
Ситуация такая: При нажатии кнопки сохранить, алертом выдается сообщение: Ваше сообщение сохранено. Мне для дальнейшего выполнения скрипта теста, нужно нажать Ok чтоб оно закрылось. Если знаете как поступить - напишите.
Спасибо.
if $this->selenium->isAlertPresent() {$this->selenium->getAlert( );};
#3
Отправлено 23 января 2009 - 11:00
Я так и делаю, не работает.А может и getAlert вызывать обращаясь к объекту селениума? Например,
if $this->selenium->isAlertPresent() {$this->selenium->getAlert( );};
#4
Отправлено 23 января 2009 - 11:08
Тогда перед вызовом getAlert добавьте вызов chooseOkOnNextConfirmation. Просто попробовать.Я так и делаю, не работает.А может и getAlert вызывать обращаясь к объекту селениума? Например,
if $this->selenium->isAlertPresent() {$this->selenium->getAlert( );};
Но опять же, есть маленькая оговорка насчет getAlert:
NOTE: Selenium does NOT support JavaScript alerts that are generated in a page's onload() event handler. In this case a visible dialog WILL be generated and Selenium will hang until someone manually clicks OK.
#5
Отправлено 23 января 2009 - 11:52
Нет, это окошко с одной кнопкой->alert а не chooseOkOnNextConfirmationТогда перед вызовом getAlert добавьте вызов chooseOkOnNextConfirmation. Просто попробовать.Я так и делаю, не работает.А может и getAlert вызывать обращаясь к объекту селениума? Например,
if $this->selenium->isAlertPresent() {$this->selenium->getAlert( );};
Но опять же, есть маленькая оговорка насчет getAlert:NOTE: Selenium does NOT support JavaScript alerts that are generated in a page's onload() event handler. In this case a visible dialog WILL be generated and Selenium will hang until someone manually clicks OK.
(попробовала, не идет)
#6
Отправлено 23 января 2009 - 12:01
#7
Отправлено 23 января 2009 - 12:30
Если isAlertPresent возвращает false или getAlert не возвращает текст этого окна, то стоит подумать над тем, а алерт ли это. Это может быть и confirmation и prompt (чисто теоретически). Если ничего из этого не помогает, то стоит подумать над настройками браузера. Возможно есть возможность отключить появление подобного диалога. Например, диалог сохранения файла селениумом не ловится никак. Чтоб эту проблему обойти в том же FireFox можно настроить так, что этот диалог для определенных типов файлов не появляется, а сохранение происходит сразу в некоторый целевой каталог.Он пишет - нет алерта. И продолжает выполнять команды.... Может на окно как-то переключиться?. Но это 100% алерт :(
#8
Отправлено 23 января 2009 - 14:23
Спасибо. Значит он просто не ловится селеном. Буду разбивать тесты на 2. До этого алерта, и после него. :( Если есть более интересные решения сообщите.Если isAlertPresent возвращает false или getAlert не возвращает текст этого окна, то стоит подумать над тем, а алерт ли это. Это может быть и confirmation и prompt (чисто теоретически). Если ничего из этого не помогает, то стоит подумать над настройками браузера. Возможно есть возможность отключить появление подобного диалога. Например, диалог сохранения файла селениумом не ловится никак. Чтоб эту проблему обойти в том же FireFox можно настроить так, что этот диалог для определенных типов файлов не появляется, а сохранение происходит сразу в некоторый целевой каталог.Он пишет - нет алерта. И продолжает выполнять команды.... Может на окно как-то переключиться?. Но это 100% алерт :(
#9
Отправлено 23 января 2009 - 14:55
Более интересное решение есть, в принципе. У объекта Selenium есть такой метод как getEval, которому передается код на JScript-е и который возвращает результат выполнения этого JScript-a. А в JScript есть объект (что-то вроде WScript.Shell), у которого есть такой метод как SendKeys. В общем, он эмулирует ввод клавиатуры. Банальное нажатие Enter закроет этот алерт или что это такое.Спасибо. Значит он просто не ловится селеном. Буду разбивать тесты на 2. До этого алерта, и после него. :( Если есть более интересные решения сообщите.
Основной недостаток такого решения - необходимость держать окно тестируемого приложения активным. То есть, в этом случае уже нельзя будет окна браузера отодвигать на задний план, так как SendKeys посылает сообщения с клавиатуры "в эфир" и перехватит его активное в данный момент окно.
#10
Отправлено 25 января 2009 - 06:23
Второй день пытаюсь нажать enter с клавиатуры. В Селене IDE не получается. есть методВ общем, он эмулирует ввод клавиатуры. Банальное нажатие Enter закроет этот алерт или что это такое.
keyPress(locator, keySequence)
Arguments:
* locator - an element locator
* keySequence - Either be a string("\" followed by the numeric keycode of the key to be pressed, normally the ASCII value of that key), or a single character. For example: "w", "\119".
Никак не пойму что такое локатор и какой он у всплывающих окон?
Нашла в нете такие конструкции:
Simulates a user pressing and releasing a key.
$this->selenium->keyPress("dom=document.getElementById('mce_editor_0').contentDocument.body", "\\20");
Но что в моем случае ставить не пойму.
selenium.keyPress("textField", "\25");
selenium.keyPress(ENTRIES, "\106");
Кто сталкивался с этим? Подскажите пожалуйста.
#11
Отправлено 25 января 2009 - 09:10
Тот метод, который вы нашли, он применим именно для веб-объектов. Локатор - это строка, идентифицирующая объект, для которого надо выполнить указанное действие.Второй день пытаюсь нажать enter с клавиатуры. В Селене IDE не получается. есть методВ общем, он эмулирует ввод клавиатуры. Банальное нажатие Enter закроет этот алерт или что это такое.
keyPress(locator, keySequence)
Arguments:
* locator - an element locator
* keySequence - Either be a string("\" followed by the numeric keycode of the key to be pressed, normally the ASCII value of that key), or a single character. For example: "w", "\119".
Никак не пойму что такое локатор и какой он у всплывающих окон?
Нашла в нете такие конструкции:
Simulates a user pressing and releasing a key.
$this->selenium->keyPress("dom=document.getElementById('mce_editor_0').contentDocument.body", "\\20");
Но что в моем случае ставить не пойму.
selenium.keyPress("textField", "\25");
selenium.keyPress(ENTRIES, "\106");
Кто сталкивался с этим? Подскажите пожалуйста.
То решение, о котором я говорил, использует немного другой функционал. В основе вызов JScript, который эмулирует посылку нажатия Enter "в эфир", а не какому-то конкретному объекту. Сам код на JScript имеет вид:
var WshShell = WScript.CreateObject("WScript.Shell"); WshShell.SendKeys( "{ENTER}" );Более подробно по данному методу можно почитать на MSDN вот здесь
А для вызова некоторого фрагмента JScript на выполнение надо воспользоваться методом Селениума getEval. То есть, в конечном счете код имеет вид:
$this->selenium->getEval( "var WshShell = WScript.CreateObject('WScript.Shell');WshShell.SendKeys( '{ENTER}' );" );
#12
Отправлено 26 января 2009 - 07:48
#13
Отправлено 26 января 2009 - 08:56
Кстати, а эти тесты случайно не под Linux выполняются? Просто объект WScript.Shell, по-моему, только под виндой есть.Чего-то он на этой команде спотыкается, пишет - error(1232956093333): Threw an exception: "WScript" - определение отсутствует
#14
Отправлено 26 января 2009 - 09:43
нет винда.Кстати, а эти тесты случайно не под Linux выполняются? Просто объект WScript.Shell, по-моему, только под виндой есть.Чего-то он на этой команде спотыкается, пишет - error(1232956093333): Threw an exception: "WScript" - определение отсутствует
#15
Отправлено 26 января 2009 - 14:00
Иногда бывает так, что alert появляется не мгновенно. То есть, приложение какое-то время думает, прежде чем его выплюнуть. Для человека этот промежуток времени может показаться абсолютно несущественным. Но машины, они шустрые:) Поэтому попробуйте так:Он пишет - нет алерта. И продолжает выполнять команды.... Может на окно как-то переключиться?. Но это 100% алерт :(
selenium.waitForCondition("selenium.isAlertPresent()", "10000");
selenium.getAlert();
#16
Отправлено 26 января 2009 - 14:36
Есть еще один момент. Если алерт появляется при работе обработчика события onload, то и это не поможет. По-крайней мере, до недавнего времени с этой проблемой народ сталкивался.Иногда бывает так, что alert появляется не мгновенно. То есть, приложение какое-то время думает, прежде чем его выплюнуть. Для человека этот промежуток времени может показаться абсолютно несущественным. Но машины, они шустрые:) Поэтому попробуйте так:Он пишет - нет алерта. И продолжает выполнять команды.... Может на окно как-то переключиться?. Но это 100% алерт :(
selenium.waitForCondition("selenium.isAlertPresent()", "10000");
selenium.getAlert();
#17
Отправлено 27 января 2009 - 07:47
Да не помогло. Может из-за браузера IE6?Есть еще один момент. Если алерт появляется при работе обработчика события onload, то и это не поможет. По-крайней мере, до недавнего времени с этой проблемой народ сталкивался.Иногда бывает так, что alert появляется не мгновенно. То есть, приложение какое-то время думает, прежде чем его выплюнуть. Для человека этот промежуток времени может показаться абсолютно несущественным. Но машины, они шустрые:) Поэтому попробуйте так:Он пишет - нет алерта. И продолжает выполнять команды.... Может на окно как-то переключиться?. Но это 100% алерт :(
selenium.waitForCondition("selenium.isAlertPresent()", "10000");
selenium.getAlert();
#18
Отправлено 27 января 2009 - 09:50
Возможно смена браузера решит эту проблему, но вполне возможно, что данная загвоздка проявляется в том, что alert вылазит в обработчике события onload, то есть еще до того, как страница загрузилась. В этом случае надо что-то другое придумыватьДа не помогло. Может из-за браузера IE6?
#19
Отправлено 24 апреля 2009 - 09:58
Но опять же, есть маленькая оговорка насчет getAlert:
NOTE: Selenium does NOT support JavaScript alerts that are generated in a page's onload() event handler. In this case a visible dialog WILL be generated and Selenium will hang until someone manually clicks OK.
А откуда эта цитата? Интересно было бы почитать
#20
Отправлено 24 апреля 2009 - 11:24
Это из документации по Selenium RC API. Например, для Java ее можно найи вот здесь.Но опять же, есть маленькая оговорка насчет getAlert:
NOTE: Selenium does NOT support JavaScript alerts that are generated in a page's onload() event handler. In this case a visible dialog WILL be generated and Selenium will hang until someone manually clicks OK.
А откуда эта цитата? Интересно было бы почитать
Аналогичные доки по API для других языков можно прочитать здесь.
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных