Визуализировать HTML-строку или локальный HTML-файл в веб-драйвере

Я хочу отобразить локальный файл HTML с помощью facebook/php-webdriver.

Например:

$host = 'http://phantomjs:8910/wd/hub'; // webdriver server is on another host
$driver = RemoteWebDriver::create($this->host, DesiredCapabilities::phantomjs());
$driver->get('file:///tmp/test.html'); 

Но он не может загрузить локальный файл.

Это здорово, если бы я мог отображать строку HTML:

$text = <<<EOT
<html><head><title>Test HTML</title></head><body><div>TEST BODY</div></body></html>
EOT;
$driver = RemoteWebDriver::create($this->host, DesiredCapabilities::phantomjs());
$driver->getHTML($text);   

Но нет функции для передачи HTML-строки.

Php-webdriver version: ^1.3
PHP version: 5.6
Selenium server version: Docker image of wernight/phantomjs:2.1.1
Operating system: Debian

Каково лучшее решение для каждой из этих проблем.


person Arash Mousavi    schedule 13.02.2017    source источник


Ответы (1)


Я не думаю, что (в настоящее время) в любой из привязок селена для браузера есть способ открыть файл (что может привести к собственным проблемам для удаленных драйверов), но это можно «обмануть» с помощью javascript.

Идея в том, чтобы открыть любой url, а потом подставить html страницы на свой — через js document.write(). Вот решение, основанное на вашем коде:

// the target html - in the sample it's just a string var
// in the final version - read it from the file system
$text = <<<EOT
<html><head><title>Test HTML</title></head><body><div>TEST BODY</div></body>
</html>
EOT;    
// the JS we will use to change the html
$js = sprintf("document.write('%s);",$text);

// get the driver
$host = 'http://phantomjs:8910/wd/hub'; // webdriver server is on another host
$driver = RemoteWebDriver::create($this->host, DesiredCapabilities::phantomjs());

// open a generic site, you know is reachable
$driver->get('http://google.com');
// and now, just change the source through JS's document.write()
$driver->executeScript($js);

Отказ от ответственности — php не является моей сильной стороной (на самом деле, это моя слабость :D), поэтому приведенный выше пример кода вполне может быть далек от совершенства

Несколько слов предостережения

person Todor Minakov    schedule 09.04.2017