Думаю нет нужды рассказывать про паттерн PageObject и то как он реализован в байндингах для Java, C# и других языков.
Сегодня я расскажу как реализовать его на PHP. Вы скажите что для PHP есть множество версий клиента и универсальный паттерн будет сделать тяжело... Нет не тяжело скажу я вам.
Нужно просто использовать возможности языка и среды разработки.
Итак приступим:
<php
/**
* описываем тут наши элементы из массива чтоб среда разработки о них знала
* @property element1
* @property element2
*/
class SimplePage{
//наш драйвер, не важно из какого клиента
protected $driver;
// конструктор
public __construct($driver){
$this->driver=$driver;
}
//собственно элементы на стрнаице в виде массива
private $elements=array(
"element1"=>"//xpath1",
"element2"=>"//xpath2",
);
//начинается магия
public function __get($name){
if (array_key_exists($name, $this->elements)){
// каюсь тут уже придется использовать конкретный код из клиента
// в нашем случае отсюда https://github.com/voodoo144/PHP-WebDriver
return $this->driver->findElement(By::xPath($this->elements[$name]));
}
}
}
Пример использования:
$page = new SimplePage($driver);
$page->element1; //вернет WebElement c xpath1
$page->element2; //вернет WebElement c xpath2
Надеюсь код получисля довольно очевидным. И если честно мне он нравится намного больше чем версия для Java.
Сегодня я расскажу как реализовать его на PHP. Вы скажите что для PHP есть множество версий клиента и универсальный паттерн будет сделать тяжело... Нет не тяжело скажу я вам.
Нужно просто использовать возможности языка и среды разработки.
Итак приступим:
<php
/**
* описываем тут наши элементы из массива чтоб среда разработки о них знала
* @property element1
* @property element2
*/
class SimplePage{
//наш драйвер, не важно из какого клиента
protected $driver;
// конструктор
public __construct($driver){
$this->driver=$driver;
}
//собственно элементы на стрнаице в виде массива
private $elements=array(
"element1"=>"//xpath1",
"element2"=>"//xpath2",
);
//начинается магия
public function __get($name){
if (array_key_exists($name, $this->elements)){
// каюсь тут уже придется использовать конкретный код из клиента
// в нашем случае отсюда https://github.com/voodoo144/PHP-WebDriver
return $this->driver->findElement(By::xPath($this->elements[$name]));
}
}
}
Пример использования:
$page = new SimplePage($driver);
$page->element1; //вернет WebElement c xpath1
$page->element2; //вернет WebElement c xpath2
Надеюсь код получисля довольно очевидным. И если честно мне он нравится намного больше чем версия для Java.
>>>множество версий клиента
ОтветитьУдалитьАлексей, а что это за множество?
На одном только selniumhq.org есть несколько вариантов
ОтветитьУдалитьPHP by Chibimagic (real name unknown?)
PHP by Lukasz Kolczynski
PHP by facebook
PHP by Adam Goucher (SeHQ recommended php client)
PHP by Nearsoft
И это не считая клиентов что есть во всяких phpunit и codeception и прочих )