пятница, 22 февраля 2013 г.

PageObject for PHP

Думаю нет нужды рассказывать про паттерн 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.

2 комментария:

  1. >>>множество версий клиента
    Алексей, а что это за множество?

    ОтветитьУдалить
  2. На одном только 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 и прочих )

    ОтветитьУдалить