Spec-Zone.ru › Codeception

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

  1. Создайте учетную запись на SauceLabs.com, чтобы получить имя пользователя и ключ доступа
  2. В конфигурации модуля используйте формат username:access_key@ondemand.saucelabs.com’ для host
  3. Настройте platform в capabilities для определения операционной системы
  4. Запустите приложение туннеля, если к вашему сайту нельзя получить доступ из Интернета
    modules:
       enabled:
          - WebDriver:
             url: http://mysite.com
             host: '<username>:<access key>@ondemand.saucelabs.com'
             port: 80
             browser: chrome
             capabilities:
                 platform: 'Windows 10'

BrowserStack

  1. Создайте учетную запись на BrowserStack, чтобы получить имя пользователя и ключ доступа
  2. В конфигурации модуля используйте формат username:access_key@hub.browserstack.com’ для host
  3. Настройте os и os_version в capabilities для определения операционной системы
  4. Если к вашему сайту можно получить доступ только локально или через 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

  1. Создайте учетную запись на LambdaTest, чтобы получить имя пользователя и ключ доступа
  2. В конфигурации модуля используйте формат username:access key@hub.lambdatest.com’ для host
  3. Настройте os и os_version в capabilities для определения операционной системы
  4. Если к вашему сайту можно получить доступ только локально или через 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

  1. Создайте учетную запись на TestingBot, чтобы получить ключ и секрет
  2. В конфигурации модуля используйте формат key:secret@hub.testingbot.com’ для host
  3. Настройте platform в capabilities для определения операционной системы
  4. Запустите 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:

  1. Выглядит ли локатор как селектор ID (например, «#foo»)? Если да, попробуйте найти форму, соответствующую этому ID.
  2. Если ничего не найдено, проверьте, похож ли локатор на селектор CSS. Если да, запустите его.
  3. Если ничего не найдено, проверьте, похож ли локатор на выражение XPath. Если да, запустите его.
  4. Выбросьте исключение 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

Удаляет снимок сессии.

См. saveSessionSnapshot

  • 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 &amp; 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 из сохраненной копии. Позволяет повторно использовать ту же сессию в тестах без дополнительного входа.

См. saveSessionSnapshot

  • 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 &amp; 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API