Загрузка файлов с помощью Behat, Mink и PhantomJS

Я пытаюсь загрузить файл с помощью Behat. Поэтому я написал эту простую HTML-страницу:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  </head>
  <body>
    <form method="post" enctype="multipart/form-data">
      <input type="file" name="file" id="file" /><br />
      <input type="submit" />
    </form>
  </body>
</html>

и простая функция Behat:

Feature: test
  Scenario: Some Test
    Given I am on "/upload.php"
    And I attach the file "/path/to/tile" to "file"

Когда фраза I attach the file ... to ... выполняется, драйвер selenium 2 генерирует запрос curl и отправляет его в PhantomJS: http://localhost:4444/wd/hub/session/5b9a8630-ed8e-11e4-956f-956a9ce75127/element/:wdc:1430215640681/value with params: {"value":["\/path\/to\/file"]}

Запрос не завершается, если его не прервать, и PhantomJS никак не реагирует на запрос.

Я уже искал в сети и нашел несколько потоков, в которых говорилось, что это работает, и несколько, в которых говорилось, что это не работает, включая проблему на github (https://github.com/detro/ghostdriver/issues/282), который закрывался и открывался несколько раз.

Версии: PhantomJS: 2.0.0 Behat: 3.0.15 Mink: 1.6.1 Mink-Selenium2-Driver: 1.2.0

Кто-нибудь знает рабочее решение этой проблемы?


person Dero    schedule 28.04.2015    source источник


Ответы (1)


Возможно ли такое поведение из-за невозможности загрузки файлов, что является известной ошибкой в PhantomJS v 2.0? .0?

По сути, изменение, внесенное в Qt 4.8 и впоследствии включенное в Qt 5.0, предотвратило нажатие на элементы ввода файла, которые не были вызваны жестами пользователя.

Решение обсуждается далее в ветке проблемы.

Чтобы процитировать, вы должны прокомментировать одно условие if в
/src/qt/qtwebkit/Source/WebCore/html/FileInputType.cpp

//if (!ScriptController::processingUserGesture())
//    return;

затем скомпилируйте бинарник.

person Vaviloff    schedule 22.01.2016
comment
Совсем забыл про этот пост. Да ты прав. Это ошибка PhantomJS. - person Dero; 23.01.2016