Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Не работает загрузка файла на сервер

phantomjs
selenium
webdriver
ruby
chrome
Теги: #<Tag:0x00007f7b652671a8> #<Tag:0x00007f7b65266fa0> #<Tag:0x00007f7b65266d98> #<Tag:0x00007f7b65266c08> #<Tag:0x00007f7b65266a50>

(Сергей Блохин) #1

Есть связка Ruby Selenium WebDriver PhantomJS.
Есть примерно такой код:

require 'selenium-webdriver'
driver = Selenium::WebDriver.for :phantomjs
driver.get 'example.com'
element = driver.find_element :xpath, '//input'
element.send_keys '/tmp/filename.png'

Если использовать Chrome, то всё отлично работает.
Но если использовать PhantomJS, то тест падает на .send_keys с предсмертными словами Net::ReadTimeout: Net::ReadTimeout

Кто-нить сталкивался в подобным?


(Ray Romanov) #2

http://phantomjs.org/api/webpage/method/upload-file.html
В гуглях за 10 секунд :wink:


(Сергей Блохин) #3

Конечно я смотрел это.
Но это, если мы напрямую работаем через PhantomJS (из консоли).
А мы (т. е. я) работаем внутри Selenium WebDriver обвязки над PhantomJS.
В интернете есть одно решение:

(PhantomJSDriver) driver.executePhantomJS("var page = this; page.uploadFile('input[type=file]', 'path to file');");

Но оно для Java и точно не работает в Ruby.
Я пробовал:

driver.execute_script "var page = this; page.uploadFile('input[type=file]', '/tmp/filename.ext');"

Получаю ошибку:

Selenium::WebDriver::Error::UnknownError: {“errorMessage”:“undefined is not a constructor (evaluating ‘page.uploadFile(‘input[type=file]’, ‘/tmp/filename.ext’)’)”,“request”:{“headers”:{“Accept”:“application/json”,“Accept-Encoding”:“gzip;q=1.0,deflate;q=0.6,identity;q=0.3”,“Connection”:“close”,“Content-Length”:“108”,“Content-Type”:“application/json; charset=utf-8”,“Host”:“127.0.0.1:8910”,“User-Agent”:“Ruby”},“httpVersion”:“1.1”,“method”:“POST”,“post”:"{“script”:“var page = this; page.uploadFile(‘input[type=file]’, ‘/tmp/filename.ext’);”,“args”:[]}",“url”:"/execute",“urlParsed”:{“anchor”:"",“query”:"",“file”:“execute”,“directory”:"/",“path”:"/execute",“relative”:"/execute",“port”:"",“host”:"",“password”:"",“user”:"",“userInfo”:"",“authority”:"",“protocol”:"",“source”:"/execute",“queryKey”:{},“chunks”:[“execute”]},“urlOriginal”:"/session/d1dd09f0-ee86-11e4-b297-cbc85bb9384a/execute"}} (org.openqa.selenium.WebDriverException)


(Sergey Korol) #4

У вас в конце отсутствует ); - чудеса копипаста, или root cause? :slight_smile:
Хотя по логу уже увидел, что строка корректная ушла.

Ну судя по всему, page у вас как раз и вылез в undefined по какой-то причине. Потому оно не смогло вызвать метод.


(Сергей Блохин) #5

К сожалению, именно это. :slight_smile: