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

Фотография

В окнах alert не могу нажать Ok


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

#1 anechka07

anechka07

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

  • Members
  • Pip
  • 41 сообщений
  • ФИО:К.А.Г.
  • Город:Россия, Краснодар

Отправлено 23 января 2009 - 09:24

Пишу на ПХП. Пыталась сделать конструкцию вида if $this->selenium->isAlertPresent() {getAlert( );};

Ситуация такая: При нажатии кнопки сохранить, алертом выдается сообщение: Ваше сообщение сохранено. Мне для дальнейшего выполнения скрипта теста, нужно нажать Ok чтоб оно закрылось. Если знаете как поступить - напишите.
Спасибо.
  • 0

#2 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 23 января 2009 - 10:46

Пишу на ПХП. Пыталась сделать конструкцию вида if $this->selenium->isAlertPresent() {getAlert( );};

Ситуация такая: При нажатии кнопки сохранить, алертом выдается сообщение: Ваше сообщение сохранено. Мне для дальнейшего выполнения скрипта теста, нужно нажать Ok чтоб оно закрылось. Если знаете как поступить - напишите.
Спасибо.

А может и getAlert вызывать обращаясь к объекту селениума? Например,

if $this->selenium->isAlertPresent() {$this->selenium->getAlert( );};
  • 0

#3 anechka07

anechka07

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

  • Members
  • Pip
  • 41 сообщений
  • ФИО:К.А.Г.
  • Город:Россия, Краснодар

Отправлено 23 января 2009 - 11:00

А может и getAlert вызывать обращаясь к объекту селениума? Например,

if $this->selenium->isAlertPresent() {$this->selenium->getAlert( );};

Я так и делаю, не работает.
  • 0

#4 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 23 января 2009 - 11:08

А может и getAlert вызывать обращаясь к объекту селениума? Например,

if $this->selenium->isAlertPresent() {$this->selenium->getAlert( );};

Я так и делаю, не работает.

Тогда перед вызовом getAlert добавьте вызов chooseOkOnNextConfirmation. Просто попробовать.
Но опять же, есть маленькая оговорка насчет 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.


  • 0

#5 anechka07

anechka07

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

  • Members
  • Pip
  • 41 сообщений
  • ФИО:К.А.Г.
  • Город:Россия, Краснодар

Отправлено 23 января 2009 - 11:52

А может и getAlert вызывать обращаясь к объекту селениума? Например,

if $this->selenium->isAlertPresent() {$this->selenium->getAlert( );};

Я так и делаю, не работает.

Тогда перед вызовом getAlert добавьте вызов chooseOkOnNextConfirmation. Просто попробовать.
Но опять же, есть маленькая оговорка насчет 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.

Нет, это окошко с одной кнопкой->alert а не chooseOkOnNextConfirmation
(попробовала, не идет)
  • 0

#6 anechka07

anechka07

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

  • Members
  • Pip
  • 41 сообщений
  • ФИО:К.А.Г.
  • Город:Россия, Краснодар

Отправлено 23 января 2009 - 12:01

Он пишет - нет алерта. И продолжает выполнять команды.... Может на окно как-то переключиться?. Но это 100% алерт :(
  • 0

#7 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 23 января 2009 - 12:30

Он пишет - нет алерта. И продолжает выполнять команды.... Может на окно как-то переключиться?. Но это 100% алерт :(

Если isAlertPresent возвращает false или getAlert не возвращает текст этого окна, то стоит подумать над тем, а алерт ли это. Это может быть и confirmation и prompt (чисто теоретически). Если ничего из этого не помогает, то стоит подумать над настройками браузера. Возможно есть возможность отключить появление подобного диалога. Например, диалог сохранения файла селениумом не ловится никак. Чтоб эту проблему обойти в том же FireFox можно настроить так, что этот диалог для определенных типов файлов не появляется, а сохранение происходит сразу в некоторый целевой каталог.
  • 0

#8 anechka07

anechka07

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

  • Members
  • Pip
  • 41 сообщений
  • ФИО:К.А.Г.
  • Город:Россия, Краснодар

Отправлено 23 января 2009 - 14:23

Он пишет - нет алерта. И продолжает выполнять команды.... Может на окно как-то переключиться?. Но это 100% алерт :(

Если isAlertPresent возвращает false или getAlert не возвращает текст этого окна, то стоит подумать над тем, а алерт ли это. Это может быть и confirmation и prompt (чисто теоретически). Если ничего из этого не помогает, то стоит подумать над настройками браузера. Возможно есть возможность отключить появление подобного диалога. Например, диалог сохранения файла селениумом не ловится никак. Чтоб эту проблему обойти в том же FireFox можно настроить так, что этот диалог для определенных типов файлов не появляется, а сохранение происходит сразу в некоторый целевой каталог.

Спасибо. Значит он просто не ловится селеном. Буду разбивать тесты на 2. До этого алерта, и после него. :( Если есть более интересные решения сообщите.
  • 0

#9 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 23 января 2009 - 14:55

Спасибо. Значит он просто не ловится селеном. Буду разбивать тесты на 2. До этого алерта, и после него. :( Если есть более интересные решения сообщите.

Более интересное решение есть, в принципе. У объекта Selenium есть такой метод как getEval, которому передается код на JScript-е и который возвращает результат выполнения этого JScript-a. А в JScript есть объект (что-то вроде WScript.Shell), у которого есть такой метод как SendKeys. В общем, он эмулирует ввод клавиатуры. Банальное нажатие Enter закроет этот алерт или что это такое.

Основной недостаток такого решения - необходимость держать окно тестируемого приложения активным. То есть, в этом случае уже нельзя будет окна браузера отодвигать на задний план, так как SendKeys посылает сообщения с клавиатуры "в эфир" и перехватит его активное в данный момент окно.
  • 0

#10 anechka07

anechka07

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

  • Members
  • Pip
  • 41 сообщений
  • ФИО:К.А.Г.
  • Город:Россия, Краснодар

Отправлено 25 января 2009 - 06:23

В общем, он эмулирует ввод клавиатуры. Банальное нажатие Enter закроет этот алерт или что это такое.

Второй день пытаюсь нажать enter с клавиатуры. В Селене IDE не получается. есть метод
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");

Кто сталкивался с этим? Подскажите пожалуйста.
  • 0

#11 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 25 января 2009 - 09:10

В общем, он эмулирует ввод клавиатуры. Банальное нажатие Enter закроет этот алерт или что это такое.

Второй день пытаюсь нажать enter с клавиатуры. В Селене IDE не получается. есть метод
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}' );" );

  • 0

#12 anechka07

anechka07

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

  • Members
  • Pip
  • 41 сообщений
  • ФИО:К.А.Г.
  • Город:Россия, Краснодар

Отправлено 26 января 2009 - 07:48

Чего-то он на этой команде спотыкается, пишет - error(1232956093333): Threw an exception: "WScript" - определение отсутствует
  • 0

#13 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 26 января 2009 - 08:56

Чего-то он на этой команде спотыкается, пишет - error(1232956093333): Threw an exception: "WScript" - определение отсутствует

Кстати, а эти тесты случайно не под Linux выполняются? Просто объект WScript.Shell, по-моему, только под виндой есть.
  • 0

#14 anechka07

anechka07

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

  • Members
  • Pip
  • 41 сообщений
  • ФИО:К.А.Г.
  • Город:Россия, Краснодар

Отправлено 26 января 2009 - 09:43

Чего-то он на этой команде спотыкается, пишет - error(1232956093333): Threw an exception: "WScript" - определение отсутствует

Кстати, а эти тесты случайно не под Linux выполняются? Просто объект WScript.Shell, по-моему, только под виндой есть.

нет винда.
  • 0

#15 ezha

ezha

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

  • Members
  • Pip
  • 13 сообщений
  • ФИО:Зоя

Отправлено 26 января 2009 - 14:00

Он пишет - нет алерта. И продолжает выполнять команды.... Может на окно как-то переключиться?. Но это 100% алерт :(

Иногда бывает так, что alert появляется не мгновенно. То есть, приложение какое-то время думает, прежде чем его выплюнуть. Для человека этот промежуток времени может показаться абсолютно несущественным. Но машины, они шустрые:) Поэтому попробуйте так:
selenium.waitForCondition("selenium.isAlertPresent()", "10000");
selenium.getAlert();
  • 0
Завтра. Будет.

#16 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 26 января 2009 - 14:36

Он пишет - нет алерта. И продолжает выполнять команды.... Может на окно как-то переключиться?. Но это 100% алерт :(

Иногда бывает так, что alert появляется не мгновенно. То есть, приложение какое-то время думает, прежде чем его выплюнуть. Для человека этот промежуток времени может показаться абсолютно несущественным. Но машины, они шустрые:) Поэтому попробуйте так:
selenium.waitForCondition("selenium.isAlertPresent()", "10000");
selenium.getAlert();

Есть еще один момент. Если алерт появляется при работе обработчика события onload, то и это не поможет. По-крайней мере, до недавнего времени с этой проблемой народ сталкивался.
  • 0

#17 anechka07

anechka07

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

  • Members
  • Pip
  • 41 сообщений
  • ФИО:К.А.Г.
  • Город:Россия, Краснодар

Отправлено 27 января 2009 - 07:47

Он пишет - нет алерта. И продолжает выполнять команды.... Может на окно как-то переключиться?. Но это 100% алерт :(

Иногда бывает так, что alert появляется не мгновенно. То есть, приложение какое-то время думает, прежде чем его выплюнуть. Для человека этот промежуток времени может показаться абсолютно несущественным. Но машины, они шустрые:) Поэтому попробуйте так:
selenium.waitForCondition("selenium.isAlertPresent()", "10000");
selenium.getAlert();

Есть еще один момент. Если алерт появляется при работе обработчика события onload, то и это не поможет. По-крайней мере, до недавнего времени с этой проблемой народ сталкивался.

Да не помогло. Может из-за браузера IE6?
  • 0

#18 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

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

Да не помогло. Может из-за браузера IE6?

Возможно смена браузера решит эту проблему, но вполне возможно, что данная загвоздка проявляется в том, что alert вылазит в обработчике события onload, то есть еще до того, как страница загрузилась. В этом случае надо что-то другое придумывать
  • 0

#19 happy_panda

happy_panda

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

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

Отправлено 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.


А откуда эта цитата? Интересно было бы почитать
  • 0

#20 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 24 апреля 2009 - 11:24

Но опять же, есть маленькая оговорка насчет 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.


А откуда эта цитата? Интересно было бы почитать

Это из документации по Selenium RC API. Например, для Java ее можно найи вот здесь.
Аналогичные доки по API для других языков можно прочитать здесь.
  • 0


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

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