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

Фотография

Подгрузка файла без input'а

selenium upload

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

#1 kass101

kass101

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

  • Members
  • Pip
  • 18 сообщений
  • ФИО:Сорокоумов Антон


Отправлено 16 июля 2014 - 18:48

Привет!

 

Задача: подгрузить файл на странице.

 

Исходные данные:

На странице только кнопка "Выбрать" (http://u.pikucha.ru/idkPo/choose.jpeg)

При нажатии на нее открывается нативное (для используемой ОС) окно выбора файла.

После выбора файла в нативном окне, страница делает post-запрос на сервер, подгружая файл.

После подгрузки, имя файла появляется на странице и продолжать тест (http://u.pikucha.ru/...t/filename.jpeg)

 

Проблема: селениум не работает с нативными окнами ОСей.

 

Мысли по решению:

1. KeyEvent (java) - вариант, который использую сейчас. После открытия окна с помощью java "нажимаем" на клавиши клавиатуры, вводя расположение подгружаемого файла. Минусы: не во всех ОСях сразу открывается поле ввода расположения файла, нужны доп.манипуляции; если параллельно запущено несколько тестов, "нажатия" клавиш происходят во всех тестах.

 

2. Autoit  - думаю, вариант рабочий, если тесты запускаем под windows. В моем случае, тесты запускаются на unix'е.

 

3. BrowserMobProxy (http://software-test...rowsermobproxy-) - можно попробовать эмулировать пост-запросы к серверу и ответ сервера о том, что файл успешно подгружен. Не самый прямой метод...

 

 

Может, есть варианты попроще?


  • 0

#2 vitorg

vitorg

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

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

Отправлено 16 июля 2014 - 20:46

Сейчас используем первый вариант совместно с xvfb, соответственно проблемы одновременных нажатий нет.
  • 0

#3 vmaximv

vmaximv

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

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

Отправлено 17 июля 2014 - 04:22

А не проще расхайдить необходимый input?
  • 0

#4 kass101

kass101

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

  • Members
  • Pip
  • 18 сообщений
  • ФИО:Сорокоумов Антон


Отправлено 17 июля 2014 - 05:31

Сейчас используем первый вариант совместно с xvfb, соответственно проблемы одновременных нажатий нет.

Спасибо, посмотрю.

 

 

А не проще расхайдить необходимый input?

Я его тут не вижу...


  • 0

#5 Maaaxxx

Maaaxxx

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

  • Members
  • Pip
  • 16 сообщений
  • ФИО:Максим

Отправлено 17 июля 2014 - 09:59

А не проще расхайдить необходимый input?

 

Что такое расхайдить?


  • 0

#6 vmaximv

vmaximv

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

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

Отправлено 17 июля 2014 - 16:47

Я его тут не вижу...


А он есть. Либо создается при нажатии на кнопку.
  • 0

#7 Petrov.Sergey

Petrov.Sergey

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

  • Members
  • PipPipPipPip
  • 446 сообщений
  • ФИО:Petrov Sergey
  • Город:МО, Лобня


Отправлено 18 июля 2014 - 06:25

 

А не проще расхайдить необходимый input?

 

Что такое расхайдить?

 

hide = скрытый.

расхайдить = убрать из невидимости, вытащить наружу. (слэнг наподобие "заэфпячить")


  • 0
Форум читаю набегами. По возникшим вопросам можно в скайп (в профиле).

#8 vitorg

vitorg

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

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

Отправлено 18 июля 2014 - 07:22

Расхайдить и так всем понятно, а вот заэфпячить слышу в первый раз :)
  • 0

#9 Maaaxxx

Maaaxxx

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

  • Members
  • Pip
  • 16 сообщений
  • ФИО:Максим

Отправлено 18 июля 2014 - 09:29

 

 

А не проще расхайдить необходимый input?

 

Что такое расхайдить?

 

hide = скрытый.

расхайдить = убрать из невидимости, вытащить наружу. (слэнг наподобие "заэфпячить")

 

Спасибо!

 

 

Расхайдить и так всем понятно, а вот заэфпячить слышу в первый раз :)

 

Похоже что-то от F5)


  • 0

#10 kass101

kass101

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

  • Members
  • Pip
  • 18 сообщений
  • ФИО:Сорокоумов Антон


Отправлено 22 июля 2014 - 10:52

 

Я его тут не вижу...


А он есть. Либо создается при нажатии на кнопку.

 

Второй скриншот с кодом после подгрузки файла - не вижу там инпута. Как найти?


  • 0

#11 vmaximv

vmaximv

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

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

Отправлено 22 июля 2014 - 11:08

//input[@type='file']
И он не обязательно будет рядом с исходной "дивкой".
  • 0

#12 Mystery_Andrew

Mystery_Andrew

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

  • Members
  • PipPip
  • 81 сообщений
  • ФИО:Андрей
  • Город:Москва

Отправлено 22 июля 2014 - 12:18

У нас на проекте input появляется только после нажатия на кнопку.

Как быть в данном случае? Autoit не подходит, так как тесты гоняются и под маком.

 

 

1. KeyEvent (java) - вариант, который использую сейчас. После открытия окна с помощью java "нажимаем" на клавиши клавиатуры, вводя расположение подгружаемого файла. Минусы: не во всех ОСях сразу открывается поле ввода расположения файла, нужны доп.манипуляции; если параллельно запущено несколько тестов, "нажатия" клавиш происходят во всех тестах.

 

При использовании LocalFileDetector прокатит?


  • 0

#13 barancev

barancev

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

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


Отправлено 26 июля 2014 - 13:07

Тут может быть два варианта:

1) файловое поле ввода видимое, но "замаскировано"

2) файловое поле ввода невидимое

 

В обоих случаях работает sendKeys в файловое поле ввода, но во втором случае надо его сначала сделать видимым.

 

На примерах.

 

1) http://www.plupload.com/examples/ui -- тут поле видимое, хотя это и не очевидно, поэтому всё работает "в лоб".

    FirefoxDriver driver = new FirefoxDriver();
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    driver.get("http://www.plupload.com/examples/ui");
    WebElement fileInput = driver.findElement(By.cssSelector("input[type=file]"));
    fileInput.sendKeys("c:\\temp\\image20.jpg");

2) http://demo.chevereto.com/ -- тут поле невидимое, поэтому нужно его предварительно сделать видимым:

    FirefoxDriver driver = new FirefoxDriver();
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    driver.get("http://demo.chevereto.com/");
    WebElement fileInput = driver.findElement(By.cssSelector("input[type=file]"));
    driver.executeScript("arguments[0].style.visibility='visible';"
        +"arguments[0].style.opacity=1;"
        +"arguments[0].style['transform']='translate(0px, 0px) scale(1)';"
        +"arguments[0].style['MozTransform']='translate(0px, 0px) scale(1)';"
        +"arguments[0].style['WebkitTransform']='translate(0px, 0px) scale(1)';"
        +"arguments[0].style['msTransform']='translate(0px, 0px) scale(1)';"
        +"arguments[0].style['OTransform']='translate(0px, 0px) scale(1)';"
        +"return true", fileInput);
    fileInput.sendKeys("c:\\temp\\image20.jpg");

Наверняка со стилями я переборщил, в каждом конкретном случае достаточно подчистить только какой-то один стиль (либо visibility, либо opacity, либо css transform), но много не мало :)

 

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


  • 1
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium



Темы с аналогичным тегами selenium, upload

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

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