Объединение методов webdriver

#php #webdriver #selenium-chromedriver

#php #webdriver #selenium-chromedriver

Вопрос:

Я хотел бы реализовать класс для выполнения некоторых общих функций webdriver, но я продолжаю получать: сервер драйверов умер.

Что-то вроде этого:

 class mywebdriver {

    function __construct( $args ){

        //options
        $options = new ChromeOptions();
        $options->addArguments($args);

        //capabilities
        $caps = DesiredCapabilities::chrome();
        $caps->setCapability(ChromeOptions::CAPABILITY, $options);
        $driver = ChromeDriver::start($caps);
        $driver->manage()->timeouts()->implicitlyWait = 20;

        $this->driver = $driver;    
    }

    function login(){       
        //all things related to logging into a site using $this->driver
        $this->driver->get( "www.url.com" );
    }

    function logout(){      
        //all things related to logging into a site using $this->driver
        $this->driver->quit();
    }

    function search( $value ){      
        //enter a value in the search field and print results
    }

    ... other methods
}
  

Затем объединение в цепочку методов, таких как:

 $drive = new mywebdriver();
try {
    $drive->login()
        ->search( "toyota" )
        ->search( "ford" )
        ->logout();
} catch (Exception $e) {
    echo "Caught Exception". $e->getMessage();
}
  

Является ли это типичным и возможным? Я попробовал несколько вещей, но сервер драйверов продолжает выдавать мне исключение «died».

Ответ №1:

Чтобы реализовать шаблон цепочки методов, просто верните экземпляр следующим образом:

 public function search( $value ) : mywebdriver
{      
    //enter a value in the search field and print results
    return $this;
}
  

Комментарии:

1. Именно так работает большинство моих классов, но webdriver не хочет оставаться в живых после первого метода .. идеи?

2. @BenCoffin Я не понимаю, что ты имеешь в виду. Более того, когда экземпляр больше не активен, методы вообще не могут вызываться для него (независимо от того, подключен он или нет).

3. Я просто пытаюсь выяснить, могут ли методы webdriver быть объединены в цепочку подобным образом, или они умрут до того, как будут возвращены из первого метода. Я надеялся, что кто-нибудь в stackoverflow сделал (приведенный выше пример) с webdriver и столкнулся с тем же исключением и знал, почему он, похоже, не хочет связываться.