WebDriver
Установка
Если вы используете Codeception, установленный с помощью Composer, установите этот модуль следующей командой:
composer require --dev codeception/module-webdriver
В качестве альтернативы, вы можете включить WebDriver модуль в файле конфигурации комплекта и выполнить
codecept init upgrade4
Этот модуль был включён в Codeception 2 и 3, но с версии 4 его необходимо устанавливать отдельно.
Некоторые модули поставляются с файлами PHAR.
Предупреждение. Использование файла PHAR и Composer в одном проекте может привести к непредвиденным ошибкам.
Описание
Запускайте тесты в реальных браузерах, используя протокол WebDriver W3C WebDriver protocol. Существует несколько способов запуска тестов браузера с помощью WebDriver:
Selenium (Рекомендуется)
- Требуется Java
- Требуется NodeJS
Самый быстрый способ начать работу — установить и запустить Selenium с помощью пакета selenium-standalone NodeJS.
Запустите selenium standalone в отдельном окне консоли:
selenium-standalone start
Обновите конфигурацию в acceptance.suite.yml:
modules:
enabled:
- WebDriver:
url: 'http://localhost/'
browser: chrome # 'chrome' or 'firefox' Браузер Chrome в бестемном режиме
Чтобы включить бестемный режим (запуск тестов без отображения окна) для браузера Chrome с использованием Selenium, используйте эту конфигурацию в acceptance.suite.yml:
modules:
enabled:
- WebDriver:
url: 'http://localhost/'
browser: chrome
capabilities:
chromeOptions:
args: ["--headless", "--disable-gpu"] Бестемный Selenium в Docker
Docker может поставлять Selenium Server со всеми его зависимостями и браузерами внутри одного контейнера. Запуск тестов внутри Docker так же прост, как извлечение официального изображения Selenium и запуска контейнера с Chrome:
docker run --net=host selenium/standalone-chrome
Используя --net=host разрешите Selenium доступ к локальным веб-сайтам.
Локальный Chrome и/или Firefox
Тесты могут выполняться непосредственно через ChromeDriver или GeckoDriver (для Firefox). Рассмотрите этот вариант, если вы не планируете использовать Selenium.
ChromeDriver
- Загрузите и установите ChromeDriver
- Запустите ChromeDriver в отдельном окне консоли:
chromedriver --url-base=/wd/hub.
Конфигурация в acceptance.suite.yml:
modules:
enabled:
- WebDriver:
url: 'http://localhost/'
window_size: false # disabled in ChromeDriver
port: 9515
browser: chrome
capabilities:
chromeOptions:
args: ["--headless", "--disable-gpu"] # Run Chrome in headless mode
prefs:
download.default_directory: "..." Дополнительные опции Chrome см. здесь
GeckoDriver
- [GeckoDriver])(https://github.com/mozilla/geckodriver/releases) должен быть установлен
- Запустите GeckoDriver в отдельном окне консоли:
geckodriver.
Конфигурация в acceptance.suite.yml:
modules:
enabled:
- WebDriver:
url: 'http://localhost/'
browser: firefox
path: ''
capabilities:
acceptInsecureCerts: true # allow self-signed certificates
moz:firefoxOptions:
args: ["-headless"] # Run Firefox in headless mode
prefs:
intl.accept_languages: "de-AT" # Set HTTP-Header `Accept-Language: de-AT` for requests См. возможности Firefox здесь
Облачные тесты
Услуги облачных тестов могут запускать ваши тесты WebDriver в облаке. Если вы хотите протестировать локальный сайт или сайт, защищённый брандмауэром, вы должны использовать приложение туннеля, предоставляемое службой.
SauceLabs
- Создайте учетную запись на SauceLabs.com, чтобы получить имя пользователя и ключ доступа
- В конфигурации модуля используйте формат
username:access_key@ondemand.saucelabs.com’ дляhost - Настройте
platformвcapabilitiesдля определения операционной системы - Запустите приложение туннеля, если к вашему сайту нельзя получить доступ из Интернета
modules:
enabled:
- WebDriver:
url: http://mysite.com
host: '<username>:<access key>@ondemand.saucelabs.com'
port: 80
browser: chrome
capabilities:
platform: 'Windows 10' BrowserStack
- Создайте учетную запись на BrowserStack, чтобы получить имя пользователя и ключ доступа
- В конфигурации модуля используйте формат
username:access_key@hub.browserstack.com’ дляhost - Настройте
osиos_versionвcapabilitiesдля определения операционной системы - Если к вашему сайту можно получить доступ только локально или через VPN, вы должны использовать приложение туннеля. В этом случае добавьте возможность
browserstack.localи установите её в значение true.
modules:
enabled:
- WebDriver:
url: http://mysite.com
host: '<username>:<access key>@hub.browserstack.com'
port: 80
browser: chrome
capabilities:
os: Windows
os_version: 10
browserstack.local: true # for local testing LambdaTest
- Создайте учетную запись на LambdaTest, чтобы получить имя пользователя и ключ доступа
- В конфигурации модуля используйте формат
username:access key@hub.lambdatest.com’ дляhost - Настройте
osиos_versionвcapabilitiesдля определения операционной системы - Если к вашему сайту можно получить доступ только локально или через VPN, вы должны использовать приложение туннеля. В этом случае добавьте возможности capabilities.setCapability(“tunnel”,true);.
modules:
enabled:
- WebDriver:
url: http://mysite.com
host: '<username>:<access key>@hub.lambdatest.com'
build: <your build name>
name: <your test name>
port: 80
browser: chrome
capabilities:
os: Windows
os_version: 10
browser_version: 86
resolution: 1366x768
tunnel: true # for local testing TestingBot
- Создайте учетную запись на TestingBot, чтобы получить ключ и секрет
- В конфигурации модуля используйте формат
key:secret@hub.testingbot.com’ дляhost - Настройте
platformвcapabilitiesдля определения операционной системы - Запустите TestingBot Tunnel, если к вашему сайту нельзя получить доступ из Интернета
modules:
enabled:
- WebDriver:
url: http://mysite.com
host: '<key>:<secret>@hub.testingbot.com'
port: 80
browser: chrome
capabilities:
platform: Windows 10 Конфигурация
-
urlобязательно - Базовый URL вашего приложения (amOnPage открывает URL, относительные к этому параметру). -
browserобязательно - Браузер для запуска. -
host- Хост сервера Selenium (по умолчанию 127.0.0.1). -
port- Порт сервера Selenium (по умолчанию 4444). -
restart- Установите в значениеfalse(по умолчанию), чтобы использовать одно и то же окно браузера для всех тестов, или установите в значениеtrueдля создания нового окна для каждого теста. В любом случае, после завершения всех тестов окно браузера закрывается. -
start- Автоматический запуск браузера для тестов. Может быть отключен, если сессия браузера запускается с помощью_initializeSessionвнутри помощника. -
window_size- Начальный размер окна. Установите в значениеmaximizeили размер в формате640x480. -
clear_cookies- Установите в значение false, чтобы сохранить куки, или установите в значение true (по умолчанию), чтобы удалить все куки между тестами. -
wait(по умолчанию 0 секунд) - В случае, когда элемент требуется, а он отсутствует на странице, подождите n секунд, чтобы найти его, прежде чем завершить с ошибкой. -
capabilities- Устанавливает желаемые возможности Selenium desired capabilities. Должен быть массивом ключ-значение. -
connection_timeout- таймаут для открытия подключения к удалённому серверу Selenium (по умолчанию 30 секунд). -
request_timeout- таймаут для возврата чего-либо с удалённого сервера Selenium (по умолчанию 30 секунд). -
pageload_timeout- время ожидания завершения загрузки страницы перед выбросом ошибки (по умолчанию 0 секунд). -
http_proxy- устанавливает URL прокси-сервера HTTP для тестирования удалённого сервера. -
http_proxy_port- устанавливает порт прокси-сервера HTTP -
ssl_proxy- устанавливает URL прокси-сервера SSL(HTTPS) для тестирования удалённого сервера. -
ssl_proxy_port- устанавливает порт прокси-сервера SSL(HTTPS) -
debug_log_entries- количество записей Selenium для вывода с помощьюdebugWebDriverLogsили при ошибке (по умолчанию 0). -
log_js_errors- Установите в значение true, чтобы включить возможный JavaScript в отчёт HTML, или установите в значение false (по умолчанию), чтобы отключить. -
webdriver_proxy- устанавливает http прокси для туннелирования запросов к удалённому Selenium WebDriver через -
webdriver_proxy_port- устанавливает порт http прокси-сервера для туннелирования запросов к удалённому Selenium WebDriver через
Пример (acceptance.suite.yml)
modules:
enabled:
- WebDriver:
url: 'http://localhost/'
browser: firefox
window_size: 1024x768
capabilities:
unexpectedAlertBehaviour: 'accept'
firefox_profile: '~/firefox-profiles/codeception-profile.zip.b64' Загрузка частей из других модулей
Хотя все модули Codeception разработаны для работы автономно, всё же возможно загружать несколько модулей одновременно. Чтобы использовать, например, модуль Asserts в ваших приёмных тестах, просто загрузите его так в вашем acceptance.suite.yml:
modules:
enabled:
- WebDriver
- Asserts Однако, при загрузке модуля фреймворка (например, Symfony) таким образом, это приведёт к конфликту: когда вы вызываете $I->amOnPage(), Codeception не будет знать, хотите ли вы получить доступ к странице с помощью amOnPage() WebDriver или amOnPage() Symfony. Вот почему потенциально конфликтующие модули разделены на «части». Вот как загрузить только часть «сервисов» из, например, Symfony:
modules:
enabled:
- WebDriver
- Symfony:
part: services Чтобы узнать, какие части содержит каждый модуль, посмотрите заголовок «Части» на странице модуля.
Использование
Поиск элементов
Большинство методов в этом модуле, которые работают с элементом DOM (например, click ), принимают локатор в качестве первого аргумента, который может быть строкой или массивом.
Если локатор является массивом, он должен содержать один элемент с ключом, обозначающим тип локатора (id, name, css, xpath, link, или class ), а значением — сам локатор. Это называется «строгим» локатором. Примеры:
-
['id' => 'foo']соответствует<div id="foo"> -
['name' => 'foo']соответствует<div name="foo"> -
['css' => 'input[type=input][value=foo]']соответствует<input type="input" value="foo"> -
['xpath' => "//input[@type='submit'][contains(@value, 'foo')]"]соответствует<input type="submit" value="foobar"> -
['link' => 'Click here']соответствует<a href="google.com">Click here</a> -
['class' => 'foo']соответствует<div class="foo">
Написание хороших локаторов может быть сложной задачей. Команда Mozilla написала отличное руководство под названием Написание надёжных локаторов для тестов Selenium и WebDriver.
Если вы предпочитаете, вы также можете передать строку для локатора. Это называется «размытым» локатором. В этом случае Codeception использует различные эвристики (в зависимости от вызываемого метода) для определения того, к какому элементу вы ссылаетесь. Например, вот эвристика, используемая для метода submitForm:
- Выглядит ли локатор как селектор ID (например, «#foo»)? Если да, попробуйте найти форму, соответствующую этому ID.
- Если ничего не найдено, проверьте, похож ли локатор на селектор CSS. Если да, запустите его.
- Если ничего не найдено, проверьте, похож ли локатор на выражение XPath. Если да, запустите его.
- Выбросьте исключение
ElementNotFound.
Обратите внимание, что нестрогие локаторы могут быть значительно медленнее строгих локаторов. Особенно если вы используете Selenium WebDriver с опцией wait (т.н. неявный таймаут). В примере выше, если вы установите wait в 5 секунд и используете XPath строку как нестрогий локатор, метод submitForm будет ждать 5 секунд на каждом шаге. Это означает 5 секунд на поиск формы по ID, ещё 5 секунд на поиск по CSS, пока, наконец, не попытается найти форму по XPath). Если скорость является проблемой, рекомендуется явно указывать тип локатора с помощью синтаксиса массива.
Получение метаданных сценария
Вы можете внедрить \Codeception\Scenario в свой тест, чтобы получить информацию о текущей конфигурации:
use Codeception\Scenario
public function myTest(AcceptanceTester $I, Scenario $scenario)
{
if ('firefox' === $scenario->current('browser')) {
// ...
}
} См. Получение метаданных сценария для получения дополнительной информации о $scenario.
Общедоступные свойства
-
webDriver- экземпляр\Facebook\WebDriver\Remote\RemoteWebDriver. К нему можно получить доступ из вспомогательных классов для сложных взаимодействий с WebDriver.
// inside Helper class
$this->getModule('WebDriver')->webDriver->getKeyboard()->sendKeys('hello, webdriver'); Действия
_backupSession
скрытый API-метод, ожидается его использование из вспомогательных классов
Возвращает текущую сессию WebDriver для сохранения
return RemoteWebDriver
_capabilities
скрытый API-метод, ожидается его использование из вспомогательных классов
Изменение возможностей WebDriver. Должен быть выполнен перед запуском новой сессии браузера. Этот метод ожидает функцию, которая возвращает массив или объект WebDriver Desired Capabilities. Дополнительные параметры Chrome (например, добавление расширений) также могут быть переданы.
<?php // in helper
public function _before(TestInterface $test)
{
$this->getModule('WebDriver')->_capabilities(function($currentCapabilities) {
// or new \Facebook\WebDriver\Remote\DesiredCapabilities();
return \Facebook\WebDriver\Remote\DesiredCapabilities::firefox();
});
} чтобы это работало, загрузите \Helper\Acceptance перед WebDriver в acceptance.suite.yml:
modules:
enabled:
- \Helper\Acceptance
- WebDriver Например, BrowserStack облачная служба может потребовать установить имя теста в возможностях. Это можно сделать с помощью метода _capabilities из Helper\Acceptance:
<?php // inside Helper\Acceptance
public function _before(TestInterface $test)
{
$name = $test->getMetadata()->getName();
$this->getModule('WebDriver')->_capabilities(function($currentCapabilities) use ($name) {
$currentCapabilities['name'] = $name;
return $currentCapabilities;
});
} В этом случае, убедитесь, что \Helper\Acceptance загружен перед WebDriver, чтобы новые возможности могли быть применены.
-
param \Closure$capabilityFunction
_closeSession
скрытый API-метод, ожидается его использование из вспомогательных классов
Вручную закрывает текущую сессию WebDriver.
<?php
$this->getModule('WebDriver')->_closeSession();
// close a specific session
$webDriver = $this->getModule('WebDriver')->webDriver;
$this->getModule('WebDriver')->_closeSession($webDriver); -
param$webDriver (необязательно) экземпляр конкретной сессии webdriver
_findClickable
скрытый API-метод, ожидается его использование из вспомогательных классов
Находит нажимаемый элемент.
Используйте его в классах Helpers или GroupObject или Extension:
<?php
$module = $this->getModule('WebDriver');
$page = $module->webDriver;
// search a link or button on a page
$el = $module->_findClickable($page, 'Click Me');
// search a link or button within an element
$topBar = $module->_findElements('.top-bar')[0];
$el = $module->_findClickable($topBar, 'Click Me'); -
param RemoteWebDriver$page Экземпляр WebDriver или элемент для поиска внутри -
param$link Текст ссылки или локатор для нажатия return WebDriverElement
_findElements
скрытый API-метод, ожидается его использование из вспомогательных классов
Находит элемент, используя доступные типы локаторов Codeception:
- XPath
- CSS
- Строгий локатор
Используйте его в классах Helpers или GroupObject или Extension:
<?php
$els = $this->getModule('WebDriver')->_findElements('.items');
$els = $this->getModule('WebDriver')->_findElements(['name' => 'username']);
$editLinks = $this->getModule('WebDriver')->_findElements(['link' => 'Edit']);
// now you can iterate over $editLinks and check that all them have valid hrefs Модуль WebDriver возвращает экземпляры Facebook\WebDriver\Remote\RemoteWebElement, модули PhpBrowser и Framework возвращают экземпляры Symfony\Component\DomCrawler\Crawler
-
param$locator -
return arrayинтерактивных элементов
_getCurrentUri
скрытый API-метод, ожидается его использование из вспомогательных классов
URI текущей открытой страницы.
-
return string@throws ModuleException
_getUrl
скрытый API-метод, ожидается его использование из вспомогательных классов
Возвращает URL хоста.
@throws ModuleConfigException
_initializeSession
скрытый API-метод, ожидается его использование из вспомогательных классов
Вручную запускает новую сессию браузера.
<?php
$this->getModule('WebDriver')->_initializeSession(); _loadSession
скрытый API-метод, ожидается его использование из вспомогательных классов
Загружает текущий экземпляр RemoteWebDriver как сессию
-
param RemoteWebDriver$session
_restart
скрытый API-метод, ожидается его использование из вспомогательных классов
Перезапускает веб-браузер. Может использоваться с _reconfigure для открытия браузера с другой конфигурацией
<?php
// inside a Helper
$this->getModule('WebDriver')->_restart(); // just restart
$this->getModule('WebDriver')->_restart(['browser' => $browser]); // reconfigure + restart -
param array$config
_savePageSource
скрытый API-метод, ожидается его использование из вспомогательных классов
Сохраняет исходный код HTML страницы в файл
-
param$filename
_saveScreenshot
скрытый API-метод, ожидается его использование из вспомогательных классов
Сохраняет скриншот текущей страницы в файл
$this->getModule('WebDriver')->_saveScreenshot(codecept_output_dir().'screenshot_1.png'); -
param$filename
acceptPopup
Принимает активное всплывающее окно JavaScript, созданное window.alert|window.confirm|window.prompt. Не путайте всплывающие окна с модальными окнами, созданными различными библиотеками.
amOnPage
Открывает страницу по заданному относительному URI.
<?php
// opens front page
$I->amOnPage('/');
// opens /register page
$I->amOnPage('/register'); -
param string$page
amOnSubdomain
Изменяет поддомен для параметра конфигурации «url». Не открывает страницу; используйте amOnPage для этого.
<?php
// If config is: 'http://mysite.com'
// or config is: 'http://www.mysite.com'
// or config is: 'http://company.mysite.com'
$I->amOnSubdomain('user');
$I->amOnPage('/');
// moves to http://user.mysite.com/
?> -
param$subdomain
amOnUrl
Открывает веб-страницу по заданному абсолютному URL и устанавливает его имя хоста в качестве базового хоста.
<?php
$I->amOnUrl('http://codeception.com');
$I->amOnPage('/quickstart'); // moves to http://codeception.com/quickstart
?> appendField
Добавляет заданный текст к заданному элементу. Также может добавить выбор в раскрывающийся список.
<?php
$I->appendField('#mySelectbox', 'SelectValue');
$I->appendField('#myTextField', 'appended');
?> -
param string$field -
param string$value @throws \Codeception\Exception\ElementNotFound
attachFile
Прикрепляет файл, относящийся к каталогу Codeception _data к заданному полю загрузки файлов.
<?php
// file is stored in 'tests/_data/prices.xls'
$I->attachFile('input[@type="file"]', 'prices.xls');
?> -
param$field -
param$filename
cancelPopup
Отменяет активное всплывающее окно JavaScript, созданное window.alert, window.confirm, или window.prompt.
checkOption
Отмечает флажок. Для радиокнопок используйте метод selectOption.
<?php
$I->checkOption('#agree');
?> -
param$option
clearField
Очищает заданное поле, которое не пусто.
<?php
$I->clearField('#username'); -
param$field
click
Выполнить щелчок по ссылке или кнопке, заданной локатором. Если задан нестрогий локатор, страница будет просканирована на поиск кнопки, ссылки или изображения, соответствующего строке локета. Для кнопок ищется атрибут «value», атрибут «name» и внутренний текст. Для ссылок ищется текст ссылки. Для изображений ищется атрибут «alt» и внутренний текст любых родительских ссылок.
Второй параметр — контекст (локатор CSS или XPath) для сужения поиска.
Обратите внимание, что если локализованная кнопка имеет тип submit, форма будет отправлена.
<?php
// simple link
$I->click('Logout');
// button of form
$I->click('Submit');
// CSS button
$I->click('#form input[type=submit]');
// XPath
$I->click('//form/*[@type="submit"]');
// link in context
$I->click('Logout', '#nav');
// using strict locator
$I->click(['link' => 'Login']);
?> -
param$link -
param$context
clickWithLeftButton
Выполняет щелчок левой кнопкой мыши по элементу. Если первый параметр null, то смещение относительно фактического положения курсора. Если второй и третий параметры заданы, то курсор перемещается в смещение от верхнего левого угла элемента. В противном случае курсор перемещается в центр элемента.
<?php $I->clickWithLeftButton(['css' => '.checkout']); $I->clickWithLeftButton(null, 20, 50); $I->clickWithLeftButton(['css' => '.checkout'], 20, 50); ?>
-
param string$cssOrXPath css или xpath веб-элемента (по умолчанию body). -
param int$offsetX -
param int$offsetY
@throws \Codeception\Exception\ElementNotFound
clickWithRightButton
Выполняет контекстное нажатие правой кнопкой мыши по элементу. Если первый параметр null, то смещение относительно фактического положения курсора. Если второй и третий параметры заданы, то курсор перемещается в смещение от верхнего левого угла элемента. В противном случае курсор перемещается в центр элемента.
<?php $I->clickWithRightButton(['css' => '.checkout']); $I->clickWithRightButton(null, 20, 50); $I->clickWithRightButton(['css' => '.checkout'], 20, 50); ?>
-
param string$cssOrXPath css или xpath веб-элемента (по умолчанию body). -
param int$offsetX -
param int$offsetY
@throws \Codeception\Exception\ElementNotFound
closeTab
Закрывает текущую вкладку браузера и переключается на предыдущую активную вкладку.
<?php $I->closeTab();
debugWebDriverLogs
Выводит последние журналы Selenium в режиме отладки
-
param \Codeception\TestInterface$test
deleteSessionSnapshot
Удаляет снимок сессии.
-
param$name
dontSee
Проверяет, что текущая страница не содержит указанный текст (регистр не учитывается). Укажите локатор в качестве второго параметра, чтобы сопоставить определённую область.
<?php
$I->dontSee('Login'); // I can suppose user is already logged in
$I->dontSee('Sign Up','h1'); // I can suppose it's not a signup page
$I->dontSee('Sign Up','//body/h1'); // with XPath
$I->dontSee('Sign Up', ['css' => 'body h1']); // with strict CSS locator Обратите внимание, что поиск выполняется после удаления всех тегов HTML из тела, поэтому $I->dontSee('strong') завершится неудачей для строк, таких как:
<p>I am Stronger than thou</p><script>document.createElement('strong');</script>
Но проигнорирует строки, такие как:
<strong>Home</strong><div class="strong">Home</strong><!-- strong -->
Для проверки исходного кода используйте seeInSource().
-
param string$text -
param array|string$selector необязательный
dontSeeCheckboxIsChecked
Проверяет, что указанный флажок не установлен.
<?php
$I->dontSeeCheckboxIsChecked('#agree'); // I suppose user didn't agree to terms
$I->seeCheckboxIsChecked('#signup_form input[type=checkbox]'); // I suppose user didn't check the first checkbox in form.
?> -
param$checkbox
dontSeeCookie
Проверяет, что cookie с заданным именем отсутствует. Вы можете установить дополнительные параметры cookie, такие как domain, path, в виде массива, переданного в последнем аргументе.
-
param$cookie -
param array$params
dontSeeCurrentUrlEquals
Проверяет, что текущий URL не равен заданной строке. В отличие от dontSeeInCurrentUrl, это совпадает только с полным URL.
<?php
// current url is not root
$I->dontSeeCurrentUrlEquals('/');
?> -
param string$uri
dontSeeCurrentUrlMatches
Проверяет, что текущий URL не соответствует заданному регулярному выражению.
<?php
// to match root url
$I->dontSeeCurrentUrlMatches('~^/users/(\d+)~');
?> -
param string$uri
dontSeeElement
Проверяет, что заданный элемент невидим или отсутствует на странице. Также можно указать ожидаемые атрибуты этого элемента.
<?php
$I->dontSeeElement('.error');
$I->dontSeeElement('//form/input[1]');
$I->dontSeeElement('input', ['name' => 'login']);
$I->dontSeeElement('input', ['value' => '123456']);
?> -
param$selector -
param array$attributes
dontSeeElementInDOM
Обратная функция seeElementInDOM.
-
param$selector -
param array$attributes
dontSeeInCurrentUrl
Проверяет, что текущий URI не содержит заданную строку.
<?php
$I->dontSeeInCurrentUrl('/users/');
?> -
param string$uri
dontSeeInField
Проверяет, что поле ввода или текстовое поле не содержит заданное значение. Для размытых локаторов поле подбирается по тексту метки, CSS и XPath.
<?php
$I->dontSeeInField('Body','Type your comment here');
$I->dontSeeInField('form textarea[name=body]','Type your comment here');
$I->dontSeeInField('form input[type=hidden]','hidden_value');
$I->dontSeeInField('#searchform input','Search');
$I->dontSeeInField('//form/*[@name=search]','Search');
$I->dontSeeInField(['name' => 'search'], 'Search');
?> -
param$field -
param$value
dontSeeInFormFields
Проверяет, что массив параметров формы (имя => значение) не задан для формы, соответствующей переданному селектору.
<?php
$I->dontSeeInFormFields('form[name=myform]', [
'input1' => 'non-existent value',
'input2' => 'other non-existent value',
]);
?> Для проверки, что элементу не было назначено ни одно из множества значений, можно передать массив как значение:
<?php
$I->dontSeeInFormFields('.form-class', [
'fieldName' => [
'This value shouldn\'t be set',
'And this value shouldn\'t be set',
],
]);
?> Кроме того, значения флажков можно проверить с помощью булевых значений.
<?php
$I->dontSeeInFormFields('#form-id', [
'checkbox1' => true, // fails if checked
'checkbox2' => false, // fails if unchecked
]);
?> -
param$formSelector -
param$params
dontSeeInPageSource
Проверяет, что исходный код страницы не содержит заданную строку.
-
param$text
dontSeeInPopup
Проверяет, что активное всплывающее окно JavaScript, созданное window.alert|window.confirm|window.prompt, НЕ содержит заданную строку.
-
param$text
@throws \Codeception\Exception\ModuleException
dontSeeInSource
Проверяет, что текущая страница содержит заданную строку в исходном коде.
<?php
$I->dontSeeInSource('<h1>Green eggs & ham</h1>'); -
param$raw
dontSeeInTitle
Проверяет, что заголовок страницы не содержит заданную строку.
-
param$title
dontSeeLink
Проверяет, что на странице нет ссылки с заданной строкой. Если второй параметр задан, проверяются только ссылки с соответствующим атрибутом "href".
<?php
$I->dontSeeLink('Logout'); // I suppose user is not logged in
$I->dontSeeLink('Checkout now', '/store/cart.php');
?> -
param string$text -
param string$url optional
dontSeeOptionIsSelected
Проверяет, что заданный параметр не выбран.
<?php
$I->dontSeeOptionIsSelected('#form input[name=payment]', 'Visa');
?> -
param$selector -
param$optionText
doubleClick
Выполняет двойной щелчок по элементу, соответствующему CSS или XPath.
-
param$cssOrXPath @throws \Codeception\Exception\ElementNotFound
dragAndDrop
Выполняет простое перетаскивание мышью.
<?php
$I->dragAndDrop('#drag', '#drop');
?> -
param string$source (CSS ID или XPath) -
param string$target (CSS ID или XPath)
executeAsyncJS
Выполняет асинхронный JavaScript. Обратный вызов должен быть выполнен JavaScript для выхода из скрипта. Обратный вызов передаётся как последний элемент в arguments массиве. Дополнительные аргументы могут быть переданы как массив во втором параметре.
js
// wait for 1200 milliseconds my running `setTimeout`
* $I->executeAsyncJS('setTimeout(arguments[0], 1200)');
$seconds = 1200; // or seconds are passed as argument
$I->executeAsyncJS('setTimeout(arguments[1], arguments[0])', [$seconds]); -
param$script -
param array$arguments
executeInSelenium
Метод низкоуровневого API. Если команд Codeception недостаточно, это позволяет напрямую использовать методы Selenium WebDriver:
$I->executeInSelenium(function(\Facebook\WebDriver\Remote\RemoteWebDriver $webdriver) {
$webdriver->get('http://google.com');
}); Это выполняется в контексте класса RemoteWebDriver. Постарайтесь не использовать эту команду регулярно. Если Codeception не хватает какой-либо функции, пожалуйста, реализуйте её и отправьте исправление.
-
param callable$function
executeJS
Выполняет пользовательский JavaScript.
Этот пример использует jQuery для получения значения и присваивает это значение переменной PHP:
<?php
$myVar = $I->executeJS('return $("#myField").val()');
// additional arguments can be passed as array
// Example shows `Hello World` alert:
$I->executeJS("window.alert(arguments[0])", ['Hello world']); -
param$script -
param array$arguments
fillField
Заполняет текстовое поле или область ввода заданной строкой.
<?php
$I->fillField("//input[@type='text']", "Hello World!");
$I->fillField(['name' => 'email'], 'jon@example.com');
?> -
param$field -
param$value
grabAttributeFrom
Извлекает значение заданного атрибута из заданного элемента. Отказывается, если элемент не найден.
<?php
$I->grabAttributeFrom('#tooltip', 'title');
?> -
param$cssOrXpath -
param$attribute
grabCookie
Извлекает значение cookie. Вы можете установить дополнительные параметры cookie, такие как domain, path, в массиве, переданном в качестве последнего аргумента. Если cookie установлен с помощью запроса ajax (XMLHttpRequest), может возникнуть задержка в браузере, поэтому попробуйте $I->wait(0.1).
-
param$cookie -
param array$params
grabFromCurrentUrl
Выполняет заданный регулярный выражение на текущем URI и возвращает первую группу захвата. Если параметры не указаны, возвращается весь URI.
<?php
$user_id = $I->grabFromCurrentUrl('~^/user/(\d+)/~');
$uri = $I->grabFromCurrentUrl();
?> -
param string$uri optional
grabMultiple
Извлекает либо текстовое содержимое, либо значения атрибутов узлов, соответствующих $cssOrXpath, и возвращает их в виде массива.
<a href="#first">First</a> <a href="#second">Second</a> <a href="#third">Third</a>
<?php
// would return ['First', 'Second', 'Third']
$aLinkText = $I->grabMultiple('a');
// would return ['#first', '#second', '#third']
$aLinks = $I->grabMultiple('a', 'href');
?> -
param$cssOrXpath -
param$attribute return string[]
grabPageSource
Извлекает исходный код текущей страницы.
@throws ModuleException если страница не была открыта.
-
return stringИсходный код текущей страницы.
grabTextFrom
Находит и возвращает текстовое содержимое заданного элемента. Если используется размытый локатор, элемент находится с помощью CSS, XPath и по соответствию всего исходного кода страницы по регулярному выражению.
<?php
$heading = $I->grabTextFrom('h1');
$heading = $I->grabTextFrom('descendant-or-self::h1');
$value = $I->grabTextFrom('~<input value=(.*?)]~sgi'); // match with a regex
?> -
param$cssOrXPathOrRegex
grabValueFrom
Находит значение для заданного поля формы. Если используется размытый локатор, поле находится по имени поля, CSS и XPath.
<?php
$name = $I->grabValueFrom('Name');
$name = $I->grabValueFrom('input[name=username]');
$name = $I->grabValueFrom('descendant-or-self::form/descendant::input[@name = 'username']');
$name = $I->grabValueFrom(['name' => 'username']);
?> -
param$field
loadSessionSnapshot
Загружает cookie из сохраненной копии. Позволяет повторно использовать ту же сессию в тестах без дополнительного входа.
-
param$name
makeElementScreenshot
Создаёт снимок экрана элемента текущего окна и сохраняет его в tests/_output/debug.
<?php
$I->amOnPage('/user/edit');
$I->makeElementScreenshot('#dialog', 'edit_page');
// saved to: tests/_output/debug/edit_page.png
$I->makeElementScreenshot('#dialog');
// saved to: tests/_output/debug/2017-05-26_14-24-11_4b3403665fea6.png -
param$name
makeHtmlSnapshot
Используйте этот метод в интерактивной паузе, чтобы сохранить HTML-исходный код текущей страницы.
<?php
$I->makeHtmlSnapshot('edit_page');
// saved to: tests/_output/debug/edit_page.html
$I->makeHtmlSnapshot();
// saved to: tests/_output/debug/2017-05-26_14-24-11_4b3403665fea6.html -
param null$name
makeScreenshot
Создаёт снимок экрана текущего окна и сохраняет его в tests/_output/debug.
<?php
$I->amOnPage('/user/edit');
$I->makeScreenshot('edit_page');
// saved to: tests/_output/debug/edit_page.png
$I->makeScreenshot();
// saved to: tests/_output/debug/2017-05-26_14-24-11_4b3403665fea6.png -
param$name
maximizeWindow
Максимизирует текущее окно.
moveBack
Перемещается назад в истории.
moveForward
Перемещается вперёд в истории.
moveMouseOver
Перемещает курсор мыши над первым элементом, соответствующим заданному локатору. Если первый параметр null, используется вся страница. Если второй и третий параметры заданы, курсор перемещается в смещение от верхнего левого угла элемента. В противном случае курсор перемещается в центр элемента.
<?php $I->moveMouseOver(['css' => '.checkout']); $I->moveMouseOver(null, 20, 50); $I->moveMouseOver(['css' => '.checkout'], 20, 50); ?>
-
param string$cssOrXPath css или xpath веб-элемента -
param int$offsetX -
param int$offsetY
@throws \Codeception\Exception\ElementNotFound
openNewTab
Открывает новую вкладку браузера и переключается на неё.
<?php $I->openNewTab();
Вкладка открывается с помощью window.open() JavaScript, что означает:
- Некоторые блокировщики рекламы могут её ограничить.
- sessionStorage копируется в новую вкладку (в отличие от вкладки, открытой пользователем вручную)
performOn
Ожидает элемента и выполняет последовательность действий в его контексте. Действия могут быть определены с помощью массива, обратного вызова или экземпляра Codeception\Util\ActionSequence.
Действия в виде массива рекомендуются для простого комбинирования «waitForElement» с утверждениями; waitForElement($el) и see('text', $el) могут быть упрощены до:
<?php $I->performOn($el, ['see' => 'text']);
Список действий можно динамически создать, используя Codeception\Util\ActionSequence:
<?php
$I->performOn('.model', ActionSequence::build()
->see('Warning')
->see('Are you sure you want to delete this?')
->click('Yes')
); Действия, выполняемые из массива или ActionSequence, будут выводить отладочные данные для действий и добавлять имя действия к исключению при ошибке.
В тех случаях, когда необходимо определить больше действий, может быть использован обратный вызов. В качестве аргумента передаётся модуль WebDriver:
<?php
$I->performOn('.rememberMe', function (WebDriver $I) {
$I->see('Remember me next time');
$I->seeElement('#LoginForm_rememberMe');
$I->dontSee('Login');
}); В 3-м аргументе можно задать количество секунд ожидания появления элемента.
-
param$element -
param$actions -
param int$timeout
pressKey
Нажимает заданную клавишу на заданном элементе. Для указания символа и модификатора (например, Ctrl, Alt, Shift, Meta) передайте массив для $char с модификатором как первый элемент, а символ как второй. Для специальных клавиш используйте константы из Facebook\WebDriver\WebDriverKeys.
<?php
// <input id="page" value="old" />
$I->pressKey('#page','a'); // => olda
$I->pressKey('#page',array('ctrl','a'),'new'); //=> new
$I->pressKey('#page',array('shift','111'),'1','x'); //=> old!!!1x
$I->pressKey('descendant-or-self::*[@id='page']','u'); //=> oldu
$I->pressKey('#name', array('ctrl', 'a'), \Facebook\WebDriver\WebDriverKeys::DELETE); //=>''
?> -
param$element -
param$char string|array Может быть символом или массивом с модификатором. Вы можете указать несколько символов. @throws \Codeception\Exception\ElementNotFound
reloadPage
Перезагружает текущую страницу.
resetCookie
Удаляет cookie с заданным именем. Вы можете установить дополнительные параметры cookie, такие как domain, path в массиве, переданном в качестве последнего аргумента.
-
param$cookie -
param array$params
resizeWindow
Изменяет размер текущего окна.
<?php $I->resizeWindow(800, 600);
-
param int$width -
param int$height
saveSessionSnapshot
Сохраняет текущие куки в именованный снимок для восстановления в других тестах. Это полезно для сохранения состояния сессии между тестами. Например, если пользователю требуется войти на сайт для каждого теста, этот сценарий можно выполнить один раз, а другие тесты могут просто восстановить сохранённые куки.
<?php
// inside AcceptanceTester class:
public function login()
{
// if snapshot exists - skipping login
if ($I->loadSessionSnapshot('login')) return;
// logging in
$I->amOnPage('/login');
$I->fillField('name', 'jon');
$I->fillField('password', '123345');
$I->click('Login');
// saving snapshot
$I->saveSessionSnapshot('login');
}
?> -
param$name
scrollTo
Переместиться к середине заданного элемента, соответствующего заданному локатору. Дополнительный сдвиг, рассчитанный от верхнего левого угла элемента, может быть задан путём передачи параметров $offsetX и $offsetY.
<?php $I->scrollTo(['css' => '.checkout'], 20, 50); ?>
-
param$selector -
param int$offsetX -
param int$offsetY
see
Проверяет, что текущая страница содержит заданную строку (регистронезависимо).
Вы можете указать конкретный HTML-элемент (через CSS или XPath) как второй параметр, чтобы искать только внутри этого элемента.
<?php
$I->see('Logout'); // I can suppose user is logged in
$I->see('Sign Up', 'h1'); // I can suppose it's a signup page
$I->see('Sign Up', '//body/h1'); // with XPath
$I->see('Sign Up', ['css' => 'body h1']); // with strict CSS locator Обратите внимание, что поиск выполняется после удаления всех HTML-тегов из тела, поэтому $I->see('strong') вернёт true для строк, таких как:
<p>I am Stronger than thou</p><script>document.createElement('strong');</script>
Но не будет верным для строк, таких как:
<strong>Home</strong><div class="strong">Home</strong><!-- strong -->
Для проверки исходного кода используйте seeInSource().
-
param string$text -
param array|string$selector необязательно
seeCheckboxIsChecked
Проверяет, что указанный чекбокс отмечен.
<?php
$I->seeCheckboxIsChecked('#agree'); // I suppose user agreed to terms
$I->seeCheckboxIsChecked('#signup_form input[type=checkbox]'); // I suppose user agreed to terms, If there is only one checkbox in form.
$I->seeCheckboxIsChecked('//form/input[@type=checkbox and @name=agree]');
?> -
param$checkbox
seeCookie
Проверяет, что установлен куки с заданным именем. Вы можете задать дополнительные параметры куки, такие как domain, path в виде массива, переданного в последнем аргументе.
<?php
$I->seeCookie('PHPSESSID');
?> -
param$cookie -
param array$params
seeCurrentUrlEquals
Проверяет, что текущий URL равен заданной строке. В отличие от seeInCurrentUrl, это соответствует только полному URL.
<?php
// to match root url
$I->seeCurrentUrlEquals('/');
?> -
param string$uri
seeCurrentUrlMatches
Проверяет, что текущий URL соответствует заданному регулярному выражению.
<?php
// to match root url
$I->seeCurrentUrlMatches('~^/users/(\d+)~');
?> -
param string$uri
seeElement
Проверяет, что данный элемент существует на странице и является видимым. Вы также можете указать ожидаемые атрибуты этого элемента.
<?php
$I->seeElement('.error');
$I->seeElement('//form/input[1]');
$I->seeElement('input', ['name' => 'login']);
$I->seeElement('input', ['value' => '123456']);
// strict locator in first arg, attributes in second
$I->seeElement(['css' => 'form input'], ['name' => 'login']);
?> -
param$selector -
param array$attributes
seeElementInDOM
Проверяет, что данный элемент существует на странице, даже если он невидим.
<?php
$I->seeElementInDOM('//form/input[type=hidden]');
?> -
param$selector -
param array$attributes
seeInCurrentUrl
Проверяет, что текущий URI содержит заданную строку.
<?php
// to match: /home/dashboard
$I->seeInCurrentUrl('home');
// to match: /users/1
$I->seeInCurrentUrl('/users/');
?> -
param string$uri
seeInField
Проверяет, что заданное поле ввода или текстовое поле равно (т.е. не просто содержит) заданное значение. Поля сопоставляются по тексту метки, атрибуту «name», CSS или XPath.
<?php
$I->seeInField('Body','Type your comment here');
$I->seeInField('form textarea[name=body]','Type your comment here');
$I->seeInField('form input[type=hidden]','hidden_value');
$I->seeInField('#searchform input','Search');
$I->seeInField('//form/*[@name=search]','Search');
$I->seeInField(['name' => 'search'], 'Search');
?> -
param$field -
param$value
seeInFormFields
Проверяет, что массив параметров формы (имя => значение) заданы в форме, соответствующей переданному селектору.
<?php
$I->seeInFormFields('form[name=myform]', [
'input1' => 'value',
'input2' => 'other value',
]);
?> Для элементов с множественным выбором или для проверки значений нескольких элементов с одинаковым именем можно передать массив:
<?php
$I->seeInFormFields('.form-class', [
'multiselect' => [
'value1',
'value2',
],
'checkbox[]' => [
'a checked value',
'another checked value',
],
]);
?> Кроме того, значения флажков могут быть проверены с помощью булевых значений.
<?php
$I->seeInFormFields('#form-id', [
'checkbox1' => true, // passes if checked
'checkbox2' => false, // passes if unchecked
]);
?> Сочетайте это с submitForm для быстрых тестов.
<?php
$form = [
'field1' => 'value',
'field2' => 'another value',
'checkbox1' => true,
// ...
];
$I->submitForm('//form[@id=my-form]', $form, 'submitButton');
// $I->amOnPage('/path/to/form-page') may be needed
$I->seeInFormFields('//form[@id=my-form]', $form);
?> -
param$formSelector -
param$params
seeInPageSource
Проверяет, что исходный код страницы содержит заданную строку.
<?php
$I->seeInPageSource('<link rel="apple-touch-icon"'); -
param$text
seeInPopup
Проверяет, что активное всплывающее окно JavaScript, созданное window.alert|window.confirm|window.prompt, содержит заданную строку.
-
param$text
@throws \Codeception\Exception\ModuleException
seeInSource
Проверяет, что текущая страница содержит заданную строку в исходном коде.
<?php
$I->seeInSource('<h1>Green eggs & ham</h1>'); -
param$raw
seeInTitle
Проверяет, что заголовок страницы содержит заданную строку.
<?php
$I->seeInTitle('Blog - Post #1');
?> -
param$title
seeLink
Проверяет, что существует ссылка с указанным текстом. Для соответствия ссылкам с указанным URL передайте полный URL в качестве второго параметра.
<?php
$I->seeLink('Logout'); // matches <a href="#">Logout</a>
$I->seeLink('Logout','/logout'); // matches <a href="/logout">Logout</a>
?> -
param string$text -
param string$url необязательно
seeNumberOfElements
Проверяет, что на странице существует определённое количество элементов, соответствующих заданному локатору.
<?php
$I->seeNumberOfElements('tr', 10);
$I->seeNumberOfElements('tr', [0,10]); // between 0 and 10 elements
?> -
param$selector -
param mixed$expected int или int[]
seeNumberOfElementsInDOM
не задокументировано
seeNumberOfTabs
Проверяет текущее количество открытых вкладок
<?php $I->seeNumberOfTabs(2);
-
param$number количество вкладок
seeOptionIsSelected
Проверяет, что заданный вариант выбран.
<?php
$I->seeOptionIsSelected('#form input[name=payment]', 'Visa');
?> -
param$selector -
param$optionText
selectOption
Выбирает вариант в теге select или в группе радиокнопок.
<?php
$I->selectOption('form select[name=account]', 'Premium');
$I->selectOption('form input[name=payment]', 'Monthly');
$I->selectOption('//form/select[@name=account]', 'Monthly');
?> Для выбора нескольких вариантов передайте массив во второй аргумент:
<?php
$I->selectOption('Which OS do you use?', array('Windows','Linux'));
?> Или передайте ассоциативный массив во второй аргумент, чтобы конкретно определить, какой метод выбора следует использовать:
<?php
$I->selectOption('Which OS do you use?', array('text' => 'Windows')); // Only search by text 'Windows'
$I->selectOption('Which OS do you use?', array('value' => 'windows')); // Only search by value 'windows'
?> -
param$select -
param$option
setCookie
Устанавливает куки с заданным именем и значением. Вы можете задать дополнительные параметры куки, такие как domain, path, expires, secure в массиве, переданном в последнем аргументе.
<?php
$I->setCookie('PHPSESSID', 'el4ukv0kqbvoirg7nkp4dncpk3');
?> -
param$name -
param$val -
param array$params
submitForm
Отправляет заданную форму на странице, необязательно с заданными значениями формы. Передайте значения полей формы в виде массива. Обратите внимание, что к скрытым полям нельзя получить доступ.
Пропущенные поля будут заполнены их значениями со страницы. Вам не нужно нажимать кнопку «Отправить» после этого. Эта команда сама вызывает запрос к действию формы.
Вы можете необязательно указать, какое значение кнопки включить в запрос с последним параметром в качестве альтернативы явной установке его значения во втором параметре, так как значения кнопок не включаются в запрос в противном случае.
Примеры:
<?php
$I->submitForm('#login', [
'login' => 'davert',
'password' => '123456'
]);
// or
$I->submitForm('#login', [
'login' => 'davert',
'password' => '123456'
], 'submitButtonName'); Например, вот пример формы «Регистрация»:
<form action="/sign_up">
Login:
<input type="text" name="user[login]" /><br/>
Password:
<input type="password" name="user[password]" /><br/>
Do you agree to our terms?
<input type="checkbox" name="user[agree]" /><br/>
Select pricing plan:
<select name="plan">
<option value="1">Free</option>
<option value="2" selected="selected">Paid</option>
</select>
<input type="submit" name="submitButton" value="Submit" />
</form> Вы можете написать следующее, чтобы отправить её:
<?php
$I->submitForm(
'#userForm',
[
'user[login]' => 'Davert',
'user[password]' => '123456',
'user[agree]' => true
],
'submitButton'
); Обратите внимание, что «2» будет отправленным значением для поля «plan», поскольку это выбранный вариант.
Также обратите внимание, что это отличается от PhpBrowser, в том, что
'user' => [ 'login' => 'Davert' ]
в настоящее время не поддерживается. Имена ключей массива обязательно должны включаться в имя, как показано выше.
Сочетайте это с seeInFormFields для быстрых тестов.
<?php
$form = [
'field1' => 'value',
'field2' => 'another value',
'checkbox1' => true,
// ...
];
$I->submitForm('//form[@id=my-form]', $form, 'submitButton');
// $I->amOnPage('/path/to/form-page') may be needed
$I->seeInFormFields('//form[@id=my-form]', $form);
?> Значения параметров должны быть установлены в массивы для нескольких полей ввода с одинаковым именем или многовыборных раскрывающихся списков. Для флажков можно использовать либо строковое значение, либо булевые значения, которые будут заменены значением флажка в DOM.
<?php
$I->submitForm('#my-form', [
'field1' => 'value',
'checkbox' => [
'value of first checkbox',
'value of second checkbox',
],
'otherCheckboxes' => [
true,
false,
false,
],
'multiselect' => [
'first option value',
'second option value',
]
]);
?> Смешение строковых и булевых значений для значения флажка не поддерживается и может привести к неожиданным результатам.
Имена полей, заканчивающиеся на «[]», должны передаваться без заключительных квадратных скобок и должны содержать массив для своего значения. Это позволяет отправлять несколько значений с одинаковым именем, рассмотрите:
$I->submitForm('#my-form', [
'field[]' => 'value',
'field[]' => 'another value', // 'field[]' is already a defined key
]); Решение заключается в передаче значения в виде массива:
// this way both values are submitted
$I->submitForm('#my-form', [
'field' => [
'value',
'another value',
]
]); Параметр $button может быть строкой, массивом или экземпляром Facebook\WebDriver\WebDriverBy. Если это строка, кнопка будет найдена по атрибуту «name». Если $button является массивом, он будет обработан как строгий селектор и WebDriverBy будет использован дословно.
Например, учитывая следующий HTML:
<input type="submit" name="submitButton" value="Submit" />
$button может быть любым из следующих:
- ‘submitButton’
- [‘name’ => ‘submitButton’]
-
WebDriverBy::name(‘submitButton’)
-
param$selector -
param$params -
param$button
switchToFrame
Переключиться на другой фрейм на странице.
Пример:
<frame name="another_frame" id="fr1" src="http://example.com">
<?php
# switch to frame by name
$I->switchToFrame("another_frame");
# switch to frame by CSS or XPath
$I->switchToFrame("#fr1");
# switch to parent page
$I->switchToFrame(); -
param string|null$locator (имя, CSS или XPath)
switchToIFrame
Переключиться на другой iframe на странице.
Пример:
<iframe name="another_frame" id="fr1" src="http://example.com">
<?php
# switch to iframe by name
$I->switchToIFrame("another_frame");
# switch to iframe by CSS or XPath
$I->switchToIFrame("#fr1");
# switch to parent page
$I->switchToIFrame(); -
param string|null$locator (имя, CSS или XPath)
switchToNextTab
Переключается на следующую вкладку браузера. Можно указать смещение.
<?php // switch to next tab $I->switchToNextTab(); // switch to 2nd next tab $I->switchToNextTab(2);
-
param int$offset 1
switchToPreviousTab
Переключается на предыдущую вкладку браузера. Можно указать смещение.
<?php // switch to previous tab $I->switchToPreviousTab(); // switch to 2nd previous tab $I->switchToPreviousTab(2);
-
param int$offset 1
switchToWindow
Переключиться на другое окно, идентифицируемое по имени.
Окно может быть идентифицировано только по имени. Если параметр $name пуст, будет использовано родительское окно.
Пример:
<input type="button" value="Open window" onclick="window.open('http://example.com', 'another_window')"> <?php
$I->click("Open window");
# switch to another window
$I->switchToWindow("another_window");
# switch to parent window
$I->switchToWindow();
?> Если у окна нет имени, найдите его, переключившись на следующую активную вкладку, используя метод switchToNextTab.
Или используйте собственные функции Selenium для доступа ко всем открытым окнам:
<?php
$I->executeInSelenium(function (\Facebook\WebDriver\Remote\RemoteWebDriver $webdriver) {
$handles=$webdriver->getWindowHandles();
$last_window = end($handles);
$webdriver->switchTo()->window($last_window);
});
?> -
param string|null$name
type
Вводит символы в активный элемент. С помощью второго параметра можно указать задержку между нажатиями клавиш.
<?php
// activate input element
$I->click('#input');
// type text in active element
$I->type('Hello world');
// type text with a 1sec delay between chars
$I->type('Hello World', 1); Это может быть полезно, когда элемент ввода реагирует на ввод, и необходимо замедлить его, чтобы имитировать поведение человека. Например, так можно заполнять поля кредитных карт.
-
param$text -
param$delay [сек]
typeInPopup
Вводит текст в всплывающее окно JavaScript, созданное window.prompt.
-
param$keys
@throws \Codeception\Exception\ModuleException
uncheckOption
Снимает флажок.
<?php
$I->uncheckOption('#notify');
?> -
param$option
unselectOption
Отменяет выбор опции в заданном выпадающем списке.
-
param$select -
param$option
wait
Ожидание в течение $timeout секунд.
-
param int|float$timeout сек @throws \Codeception\Exception\TestRuntimeException
waitForElement
Ожидает до $timeout секунд, пока элемент появится на странице. Если элемент не появляется, выбрасывается исключение по таймауту.
<?php
$I->waitForElement('#agree_button', 30); // secs
$I->click('#agree_button');
?> -
param$element -
param int$timeout секунд @throws \Exception
waitForElementChange
Ожидает до $timeout секунд, пока заданный элемент изменится. Изменение элемента определяется функцией обратного вызова, которая вызывается многократно, пока возвращаемое значение не станет истинным.
<?php
use \Facebook\WebDriver\WebDriverElement
$I->waitForElementChange('#menu', function(WebDriverElement $el) {
return $el->isDisplayed();
}, 100);
?> -
param$element -
param \Closure$callback -
param int$timeout секунд @throws \Codeception\Exception\ElementNotFound
waitForElementClickable
Ожидает до $timeout секунд, пока заданный элемент станет кликабельным. Если элемент не становится кликабельным, выбрасывается исключение по таймауту.
<?php
$I->waitForElementClickable('#agree_button', 30); // secs
$I->click('#agree_button');
?> -
param$element -
param int$timeout секунд @throws \Exception
waitForElementNotVisible
Ожидает до $timeout секунд, пока заданный элемент станет невидимым. Если элемент остается видимым, выбрасывается исключение по таймауту.
<?php
$I->waitForElementNotVisible('#agree_button', 30); // secs
?> -
param$element -
param int$timeout секунд @throws \Exception
waitForElementVisible
Ожидает до $timeout секунд, пока заданный элемент станет видимым на странице. Если элемент не появляется, выбрасывается исключение по таймауту.
<?php
$I->waitForElementVisible('#agree_button', 30); // secs
$I->click('#agree_button');
?> -
param$element -
param int$timeout секунд @throws \Exception
waitForJS
Выполняет JavaScript и ожидает до $timeout секунд, пока он не вернёт true.
В этом примере мы подождём до 60 секунд, пока завершатся все запросы jQuery AJAX.
<?php
$I->waitForJS("return $.active == 0;", 60);
?> -
param string$script -
param int$timeout секунд
waitForText
Ожидает до $timeout секунд, пока заданная строка появится на странице.
Также можно передать селектор для поиска, используя максимально возможную специфичность при использовании селекторов. waitForText() будет следить только за первым экземпляром соответствующего селектора/текста. Если заданный текст не появляется, выбрасывается исключение по таймауту.
<?php
$I->waitForText('foo', 30); // secs
$I->waitForText('foo', 30, '.title'); // secs
?> -
param string$text -
param int$timeout секунд -
param string$selector необязательный @throws \Exception
© 2011 Michael Bodnarchuk and contributors
Licensed under the MIT License.
https://codeception.com/docs/modules/WebDriver