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

Фотография

Зависание в методе Click


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

#1 Linux5

Linux5

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

  • Members
  • Pip
  • 73 сообщений
  • ФИО:Igor
  • Город:Moscow

Отправлено 07 февраля 2011 - 09:54

Исходные данные , Selenium 2 , C#

IWebElement dElement = driver.FindElement(By.Id("МОЙ ЭЛЕМЕНТ")); // Все прекрасно находится
dElement.Click(); // ВОТ ТУТ ВСЕ кликается и открывается модальный диалог , на след строчку кода не переходит !!!
IAlert alert2= driver.SwitchTo().Alert(); // Сюда уже не переходит .. , Что делать ?

Возможно опять же связано стем, что открывается модальное окно , кто знает как обойти напишите пожалуйста !
  • 0

#2 Linux5

Linux5

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

  • Members
  • Pip
  • 73 сообщений
  • ФИО:Igor
  • Город:Moscow

Отправлено 07 февраля 2011 - 14:52

И что ? нет ни у кого таких проблем ? не верю :)
  • 0

#3 KaZiK

KaZiK

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

  • Members
  • Pip
  • 22 сообщений
  • ФИО:Казимирчик Владимир

Отправлено 07 февраля 2011 - 14:56

что за диалог появляется?
  • 0

#4 bearoff

bearoff

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

  • Members
  • Pip
  • 21 сообщений
  • Город:Харьков

Отправлено 07 февраля 2011 - 16:50

Если это какой-то confirmation, то почитайте про использование ChooseOkOnNextConfirmation() тут, например.
  • 0

#5 Linux5

Linux5

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

  • Members
  • Pip
  • 73 сообщений
  • ФИО:Igor
  • Город:Moscow

Отправлено 08 февраля 2011 - 08:46

Прикрепленный файл  testDialog.rar   1,47МБ   3 Количество загрузок:

что за диалог появляется?


сделал пример (см аттач тестовой страницы)

Код такой !
IWebDriver driver = new FirefoxDriver();

driver.Navigate().GoToUrl("Ваш путь /index.html");
driver.FindElement(By.Id("testBtn")).Click();
  • 0

#6 barancev

barancev

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

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


Отправлено 08 февраля 2011 - 13:30

Переопределяйте showModalDialog -- http://seleniumdeal....d-selenium.html
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#7 barancev

barancev

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

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


Отправлено 08 февраля 2011 - 13:38

Да, и заодно проголосуйте за вот этот реквест, может быть когда-нибудь сделают, если он наберёт достаточно голосов :)
http://code.google.c...s/detail?id=284
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#8 Linux5

Linux5

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

  • Members
  • Pip
  • 73 сообщений
  • ФИО:Igor
  • Город:Moscow

Отправлено 08 февраля 2011 - 13:54

Переопределяйте showModalDialog -- http://seleniumdeal....d-selenium.html


Видел эти ссылки ...
Если я буду переопределять, тогда у меня окно не будет модальным , а мне надо именно модальное
  • 0

#9 Linux5

Linux5

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

  • Members
  • Pip
  • 73 сообщений
  • ФИО:Igor
  • Город:Moscow

Отправлено 08 февраля 2011 - 17:35

Исходные данные , Selenium 2 , C#

IWebElement dElement = driver.FindElement(By.Id("МОЙ ЭЛЕМЕНТ")); // Все прекрасно находится
dElement.Click(); // ВОТ ТУТ ВСЕ кликается и открывается модальный диалог , на след строчку кода не переходит !!!
IAlert alert2= driver.SwitchTo().Alert(); // Сюда уже не переходит .. , Что делать ?

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


Итог - Тупик !
Задача - не просто вызвать модальный диалог, а еще и пощелкать у него внутри по всяким кнопочкам и свойствам ...
Даже если распаралелить потоки и перейти на текущий модальный диалог вот так driver.SwitchTo().Alert(); то каким образом найти в нем нужную кнопку или текст или поле ?
  • 0

#10 barancev

barancev

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

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


Отправлено 08 февраля 2011 - 22:21

Даже если распаралелить потоки и перейти на текущий модальный диалог вот так driver.SwitchTo().Alert(); то каким образом найти в нем нужную кнопку или текст или поле ?

Я пробовал, у меня была похожая ситуация -- не помогает. Похоже, блокируется не поток Java, а объект WebDriver, он отказывается выполнять последующие команды.

Если сходить по ссылке на описание реквеста, там можно найти сообщение, в котором товарищ рассказывает, как ему удалось обойти эту блокировку -- он перед кликом форкал процесс, и в одном из процессов кликал, а в другом ждал модальное окно, работал с ним, а потом завершал процесс.

А чем Вам так дорога модальность? После переопределения showModalDialog на open Вы прекрасно сможете покликать в новом окне, никаких проблем с этим не возникнет.
Только переключаться надо не switchTo().alert() , а switchTo().window()
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#11 Linux5

Linux5

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

  • Members
  • Pip
  • 73 сообщений
  • ФИО:Igor
  • Город:Moscow

Отправлено 09 февраля 2011 - 10:00


Даже если распаралелить потоки и перейти на текущий модальный диалог вот так driver.SwitchTo().Alert(); то каким образом найти в нем нужную кнопку или текст или поле ?

Я пробовал, у меня была похожая ситуация -- не помогает. Похоже, блокируется не поток Java, а объект WebDriver, он отказывается выполнять последующие команды.

Если сходить по ссылке на описание реквеста, там можно найти сообщение, в котором товарищ рассказывает, как ему удалось обойти эту блокировку -- он перед кликом форкал процесс, и в одном из процессов кликал, а в другом ждал модальное окно, работал с ним, а потом завершал процесс.

А чем Вам так дорога модальность? После переопределения showModalDialog на open Вы прекрасно сможете покликать в новом окне, никаких проблем с этим не возникнет.
Только переключаться надо не switchTo().alert() , а switchTo().window()



Дизайн продукта такой - менять нельзя.. Видимо для автотестов будем делать переопреденение в коде, чтобы оно было не модальным
  • 0

#12 popo_kid

popo_kid

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

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

Отправлено 09 февраля 2011 - 10:27

почитайте приведенную ссылку получше

window.showModalDialog = function( sURL,vArguments, sFeatures)
{
if(retVal!=null) return retVal;
modalWin = window.open(sURL, 'modal', sFeatures)
}

вы переопределяете стандартную JS функцию браузера showModalDialog, так что бы на самом деле открывалось не модальное окно, а обычное. Сам апликейшин при этом менять не надо
  • 0

#13 barancev

barancev

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

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


Отправлено 09 февраля 2011 - 12:41

почитайте приведенную ссылку получше

window.showModalDialog = function( sURL,vArguments, sFeatures)
{
if(retVal!=null) return retVal;
modalWin = window.open(sURL, 'modal', sFeatures)
}

вы переопределяете стандартную JS функцию браузера showModalDialog, так что бы на самом деле открывалось не модальное окно, а обычное. Сам апликейшин при этом менять не надо

Если ещё точнее -- указанный кусочек кода можно, например, поместить в user-extension.js и при запуске selenium-сервера указать, что нужно использовать этот файл расширения.
Или даже выполнить непосредственно из самого selenium, используя метод getEval
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#14 Linux5

Linux5

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

  • Members
  • Pip
  • 73 сообщений
  • ФИО:Igor
  • Город:Moscow

Отправлено 09 февраля 2011 - 13:46

почитайте приведенную ссылку получше

window.showModalDialog = function( sURL,vArguments, sFeatures)
{
if(retVal!=null) return retVal;
modalWin = window.open(sURL, 'modal', sFeatures)
}

вы переопределяете стандартную JS функцию браузера showModalDialog, так что бы на самом деле открывалось не модальное окно, а обычное. Сам апликейшин при этом менять не надо


В нашем случае нельзя использовать переопределение :( К сожалению
Причина проста
showModalDialog - стопит java script на странице и ждет ответа от того что введет пользователь в диалоговом окне и к сожалению на это многое завязано
window.open - выполняет код дальше

Так что воркэраунд в моем случае не работает
  • 0

#15 Ice_man

Ice_man

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

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

Отправлено 10 февраля 2011 - 14:19

ПОдобное было, при использовании старого фреймворка с методами селениума. Попробуйте обновить до последней версии.
  • 0


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

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