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

Фотография

Стандартный диалог для сохранения файла - как с ним быть?


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

#1 Biasha

Biasha

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

  • Members
  • PipPip
  • 130 сообщений
  • Город:СПб

Отправлено 07 апреля 2009 - 12:18

Коллеги!

Подскажите решение такого вопроса: как селениумом обработать появление стандартного диалога для сохранения фвйла?
Ситуация такая:
1) Жмем кнопочку
2) Появляется диалог "Что делать с этим файлом"

Попробовала всякие assert alert, assert confirmation, answer on next promt - не то.

Кто знает, как это победить, поделитесь пожалуйста.

Спасибо)
  • 0
Молодой пожарный не боится пламя!

#2 vitorg

vitorg

    Опытный участник

  • Members
  • PipPipPipPip
  • 408 сообщений

Отправлено 07 апреля 2009 - 12:39

Этим окном нельзя управлять из JS, соответственно либо нативные методы, либо настроить браузер на автосохранение в конкретную папку, чтобы не задавал таких вопросов.
  • 0

#3 Biasha

Biasha

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

  • Members
  • PipPip
  • 130 сообщений
  • Город:СПб

Отправлено 07 апреля 2009 - 13:16

Какие, например, нативные методы?
Не поняла((
  • 0
Молодой пожарный не боится пламя!

#4 vitorg

vitorg

    Опытный участник

  • Members
  • PipPipPipPip
  • 408 сообщений

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

Какие, например, нативные методы?
Не поняла((

Вот здесь писал про них.
  • 0

#5 Biasha

Biasha

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

  • Members
  • PipPip
  • 130 сообщений
  • Город:СПб

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

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

#6 Biasha

Biasha

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

  • Members
  • PipPip
  • 130 сообщений
  • Город:СПб

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

В процессе копания возник вопрос.
Итак, хочу нажать Enter после появления этого же окошка.
Пишу:
selenium.click("//div[@id='ctl00_mainContent_ChainExpandableComposite_PushGrid1_collapser_ExportPanel']/a[3]");
//тут появляется диалог для работы с файлом, пытаюсь нажать Enter
selenium.keyPressNative("13");

Результат:
com.thoughtworks.selenium.SeleniumException: ERROR: Problem during keyDown: Invalid key code
at com.thoughtworks.selenium.HttpCommandProcessor.throwAssertionFailureExceptionOrError(HttpCommandProcessor.java:97)
at com.thoughtworks.selenium.HttpCommandProcessor.doCommand(HttpCommandProcessor.java:91)
.....

Или я использую не тот код клавиши?
Или нужно как-то управлять фокусом и предварительно его переместить (опять же, как это сделать пока не понимаю...) ?

Подскажите плиз.
  • 0
Молодой пожарный не боится пламя!

#7 popo_kid

popo_kid

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

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

Отправлено 27 апреля 2009 - 13:00

у enter код 10, посмотреть можно например здесь http://java.sun.com/...yEvent.VK_ENTER
события нажатия клавиш будут посланы в текущее активное окно
  • 0

#8 Biasha

Biasha

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

  • Members
  • PipPip
  • 130 сообщений
  • Город:СПб

Отправлено 28 апреля 2009 - 09:07

у enter код 10, посмотреть можно например здесь http://java.sun.com/...yEvent.VK_ENTER
события нажатия клавиш будут посланы в текущее активное окно


Странно, но не работает, хотя и ошибок не пишет.
Фокус перемещается на нужное мне окно, но принажатии enter ничего не менятся.
хм.
Пробую использовать код 1005 - в вашей ссылке он отвечает за кнопку DOWN, чтобы проверить, передаются ли события вообще в это окно. Валится ошибка с invalid code number.
Есть еще Esc с кодом 27 - с ней та же беда, что с Enter.
  • 0
Молодой пожарный не боится пламя!

#9 popo_kid

popo_kid

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

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

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

Странно, но не работает, хотя и ошибок не пишет.
Фокус перемещается на нужное мне окно, но принажатии enter ничего не менятся.
хм.
Пробую использовать код 1005 - в вашей ссылке он отвечает за кнопку DOWN, чтобы проверить, передаются ли события вообще в это окно. Валится ошибка с invalid code number.
Есть еще Esc с кодом 27 - с ней та же беда, что с Enter.

вам нужны значения констант из java.awt.event.KeyEvent, down вы где-то не там посмотрели
а тестируемое окно точно активно? активно в понимании ОС, а не селениума
а пробовали KeyDownNative + KeyUpNative
  • 0

#10 Biasha

Biasha

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

  • Members
  • PipPip
  • 130 сообщений
  • Город:СПб

Отправлено 29 апреля 2009 - 10:01

вам нужны значения констант из java.awt.event.KeyEvent, down вы где-то не там посмотрели
а тестируемое окно точно активно? активно в понимании ОС, а не селениума
а пробовали KeyDownNative + KeyUpNative


Спасибо за помощь!
В итоге проблема свелась к тому, что keyPressNative надо жать после небольшой задержки после selenium.click("LoadFileButton").

ПыСы: код кнопки Down = 40
=)
  • 0
Молодой пожарный не боится пламя!

#11 joika

joika

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

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

Отправлено 30 июня 2009 - 16:55

подскажите, а как подобную штуку сделать на пхп, если вот появляется окошко сохранения файла мозиловское и к примеру если юзать $this->doCommand("keyPressNative","10");
то селен ругается invalid key code
  • 0

#12 BFox

BFox

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

  • Members
  • Pip
  • 16 сообщений
  • ФИО:Лисов Станислав

Отправлено 01 июля 2009 - 08:25

подскажите, а как подобную штуку сделать на пхп, если вот появляется окошко сохранения файла мозиловское и к примеру если юзать $this->doCommand("keyPressNative","10");
то селен ругается invalid key code

В php есть тот же метод keyPressNative, с selenium RC в папке php есть хелп глянь его
  • 0

#13 joika

joika

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

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

Отправлено 01 июля 2009 - 10:36

подскажите, а как подобную штуку сделать на пхп, если вот появляется окошко сохранения файла мозиловское и к примеру если юзать $this->doCommand("keyPressNative","10");
то селен ругается invalid key code

В php есть тот же метод keyPressNative, с selenium RC в папке php есть хелп глянь его

public function keyPressNative($keycode)
{
$this->doCommand("keyPressNative", array($keycode));
}


Делаю $this->doCommand("keyPressNative", array(10)); всё прокатывает нормально энтер нажимается
Пытаюсь заюзать другую кнопку например нажать вниз то есть $this->doCommand("keyPressNative", array(1005)); опять пишет инвалид кейкод
  • 0

#14 BFox

BFox

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

  • Members
  • Pip
  • 16 сообщений
  • ФИО:Лисов Станислав

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

А) Внутрь его не глядел)
Что за код 1005???
Вот коды: http://msdn.microsof...y/ms927178.aspx
  • 0

#15 joika

joika

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

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

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

А) Внутрь его не глядел)
Что за код 1005???
Вот коды: http://msdn.microsof...y/ms927178.aspx

http://java.sun.com/...yEvent.VK_ENTER смотрел вот это
и там энтер 10 а по твоей ссылке 10 это шифт
  • 0

#16 BFox

BFox

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

  • Members
  • Pip
  • 16 сообщений
  • ФИО:Лисов Станислав

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

Это шестнадцатеричный код))

хотя лучше смотреть по твоей ссылке, но ты не то глянул, код кнопки down - 40
  • 0

#17 mcreature

mcreature

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

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

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

Спасибо за помощь!
В итоге проблема свелась к тому, что keyPressNative надо жать после небольшой задержки после selenium.click("LoadFileButton").

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

А вот еще вопросик по этой же теме.
Если во время прохождения теста выбран браузер, как активное окно, то диалог сохранения сам станет активным при появлении и проблем нет. А вот если в это время я делаю что-либо другое, то этот диалог активным не становится и ничего соответственно не сохраняется. Реально ли как-нибудь выбрать его принудительно? Как я понял этот диалог не браузеровский и селениум с ним работать не может. Есть варианты, кроме использования API?
  • 0

#18 KaNoN

KaNoN

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

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

Отправлено 28 октября 2009 - 14:39

Спасибо за помощь!
В итоге проблема свелась к тому, что keyPressNative надо жать после небольшой задержки после selenium.click("LoadFileButton").

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

А вот еще вопросик по этой же теме.
Если во время прохождения теста выбран браузер, как активное окно, то диалог сохранения сам станет активным при появлении и проблем нет. А вот если в это время я делаю что-либо другое, то этот диалог активным не становится и ничего соответственно не сохраняется. Реально ли как-нибудь выбрать его принудительно? Как я понял этот диалог не браузеровский и селениум с ним работать не может. Есть варианты, кроме использования API?

У нас использовался обходной маневр. Мы создали профайл в Firefox, в котором указали, что файлы определенного типа автоматически загружаются в определенный каталог, причем без появления диалога сохранения. После этого, когда нам надо что-то загрузить, то вся задача сводится к тому, что надо кликнуть на ссылку и подождать, пока в заданном каталоге не появится новый файл.

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

#19 mcreature

mcreature

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

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

Отправлено 28 октября 2009 - 14:57

У нас использовался обходной маневр. Мы создали профайл в Firefox, в котором указали, что файлы определенного типа автоматически загружаются в определенный каталог, причем без появления диалога сохранения. После этого, когда нам надо что-то загрузить, то вся задача сводится к тому, что надо кликнуть на ссылку и подождать, пока в заданном каталоге не появится новый файл.

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

В итоге так и сделали =)
Спасибо!
  • 0

#20 Александр Галямов

Александр Галямов

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

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

Отправлено 30 ноября 2009 - 09:58

Всем привет!

Есть сайт, на котором в виде списка данных во фрейме отображаются предложения (объявления), при попытке сдеть прокрутку по типу $this->keyPress("", "\34"); - ничего не работает скрипт просто виснет.

Как обойти проблему?
Как выполнить прокрутку?

Пишутся тесты на пхп.
  • 0


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

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