Selenium + PHP шпаргалка по командам

Selenium Webdriver + PHP

Шпаргалка по командам

Запуск браузера

$host = 'http://localhost:4444';

$options = new ChromeOptions();

$options->addArguments([
    '–disable-extensions',
    'start-maximized',
    'disable-popup-blocking',
    'test-type'
    ]);

$devices = ['iPhone 6', 'Nexus 5', 'Nexus 6', 'Nexus 7', 'Nokia N9'];
$random_device = $devices[array_rand($devices)];

$mobile_emulation = [ 'deviceName' => $random_device ];
$options->setExperimentalOption('mobileEmulation', $mobile_emulation);
$caps = DesiredCapabilities::chrome();
$caps->setCapability(ChromeOptions::CAPABILITY, $options);
$driver = RemoteWebDriver::create($host, $caps, 90000, 90000);

Переход по ссылке

$driver->get('http://google.com');
$driver->navigate()->to('http://google.com');

WebDriver может не ждать загрузки страницы, поэтому лучше использовать паузу.

$driver->wait(10, 2000)->until( WebDriverExpectedCondition::titleContains('Google') );

или
$driver->wait(10, 1000)->until( WebDriverExpectedCondition::visibilityOfElementLocated(WebDriverBy::linkText("Реклама")));

или 
sleep(10);

Поиск элементов на странице

# найти 1-й элемент на странице

$title = $driver->findElement(WebDriverBy::tagName("h1"));

найти все элементы на странице

// return Array()
$links = $driver->findElements(WebDriverBy::className("links"));

поиск по критериям

по имени класса

$element = $driver->findElement(WebDriverBy::className("links"));

по id элемента

$element = $driver->findElement(WebDriverBy::id("q"));

по CSS селектору

$element = $driver->findElement(WebDriverBy::cssSelector('#food span.dairy'));

по имени тега

$element = $driver->findElement(WebDriverBy::tagName("div"));

по имени

$element = $driver->findElement(WebDriverBy::name('search_input'));

по тексту ссылки

$element = $driver->findElement(WebDriverBy::linkText("cheese"));

часть имени ссылки

$element = $driver->findElement(WebDriverBy::partialLinkText("chee"));

по XPath

$element = $driver->findElement(WebDriverBy::xpath('//a[@href='/logout']'));

XPath проще всего найти в инструментах разработчика

Действия с элементами

кнопки\ссылки\картинки

$element = $driver->findElement(WebDriverBy::id('BUTTON_ID'))->click();

текстовое поле

# ввод любого текста
$driver->findElement(WebDriverBy::id('BUTTON_ID'))->click();
$driver->getKeyboard()->sendKeys('любой текст');

# Нажатие клавиш на клавиатуре `ctrl+a` & `delete`
$driver->getKeyboard()
  ->sendKeys(array(
    WebDriverKeys::CONTROL, 
    'a',
  ));

$driver->getKeyboard()
  ->sendKeys(array(
    WebDriverKeys::BACKSPACE,
  ));

# CONTROL, ENTER, SHIFT, ALT, BACKSPACE

# также можно использовать метод clear() для очистки input'ов или textarea
$loginInput = $driver->findElement(WebDriverBy::name("login"));
$loginInput->sendKeys("логин_пользователя");
$loginInput->clear();

Checkbox/Radio

# проверка выбран ли элемент
$driver->findElement(WebDriverBy::id('CheckBox'))->isSelected();

# выбор элемента
$driver->findElement(WebDriverBy::id('CheckBox'))->click();

# сброс выбора элемента the element
$driver->findElement(WebDriverBy::id('CheckBox'))->clears();

Select

# получить выбранный элемент	
$select = $driver->findElement(WebDriverBy::tagName('select'));

# получить все options для элемента
$allOptions = $select->findElement(WebDriverBy::tagName('option'));

# выбрать options
foreach ($allOptions as $option) {
  echo "Value is:" . $option->getAttribute('value);
  $option->click();
}

проверка видимости элемента

$driver->findElement(WebDriverBy::id('element'))->isDisplayed();

получить текст элемента

$driver->findElement(WebDriverBy::id('element'))->getText();

получить атрибут элемента

$driver->findElement(WebDriverBy::id('element'))->getAttribute('class');

Работа с Cookies

// получить все куки
$cookies = $driver->manage()->getCookies();

// запись куки
$driver->manage()->addCookie(['name' => 'cookie_name, 'value' => 'cookie_value']);
&&
$cookie = new Cookie('cookie_name', 'cookie_value');
$driver->manage()->addCookie($cookie);
&&
$cookie = new \Facebook\WebDriver\Cookie('cookie_name', 'cookie_value');
$driver->manage()->addCookie($cookie);

// удалить куки по имени
$driver->manage()->deleteCookieNamed('CookieName');

// удалить все куки
$driver->manage()->deleteAllCookies();

Сделать скриншот страницы

// должны быть права на запись в директорию
$driver->takeScreenshot('screenshot.png');

Выполнить JavaScript код

$driver->executeScript("return window.location.pathname");

Закрыть браузер

$driver->quit();

Хорошая документация
https://www.selenium.dev/documentation/en/getting_started/

Скачать драйвер Chrome
https://chromedriver.storage.googleapis.com/index.html

Эмуляторы различных браузеров и платформ
https://chromedriver.chromium.org/mobile-emulation

Настройки для Google Chrome
https://github.com/php-webdriver/php-webdriver/wiki/Chrome#chromeoptions

Leave a Reply

Your email address will not be published.