Передать имя теста кодового восприятия в стек браузера - PullRequest
0 голосов
/ 13 октября 2018

Я хочу передать мои тестовые имена в стек браузера, чтобы они регистрировались в значении сеанса (имя) в интерфейсе браузера

В моем помощнике по приемке у меня определен следующий метод

 /**
 * HOOK: before test
 *
 * We use this method to set the test name which will be logged in BrowserStack
 * https://www.browserstack.com/automate/capabilities
 * @param \Codeception\TestInterface $test
 */
public function _before(\Codeception\TestInterface $test)
{
    codecept_debug('_before');
    codecept_debug($this->getModule('WebDriver')->_getConfig()['capabilities']);

    $config['capabilities'] = $this->getModule('WebDriver')->_getConfig()['capabilities'];
    $config['capabilities']['name'] = $test->getName();
    $this->getModule('WebDriver')->_setConfig($config);  

    codecept_debug($this->getModule('WebDriver')->_getConfig()['capabilities']);
}

Есть несколько проблем с моим подходом

  1. Это событие возникает после того, как тест записан в стек браузера (что является моей основной проблемой - я ищу подходящее место для инъекциизначение этого имени)
  2. Тесты иногда регистрируются под неправильными именами - в нескольких тестах будет использоваться одно и то же имя

Какое событие следует использовать для достижения моих целей?

1 Ответ

0 голосов
/ 13 октября 2018

Просматривая кодовое восприятие и, в частности, исходный код веб-драйвера, я увидел следующее: https://github.com/Codeception/Codeception/blob/2.5/src/Codeception/Module/WebDriver.php#L394

 /**
 * Change capabilities of WebDriver. Should be executed before starting a new browser session.
 * This method expects a function to be passed which returns array or [WebDriver Desired Capabilities](https://github.com/facebook/php-webdriver/blob/community/lib/Remote/DesiredCapabilities.php) object.
 * Additional [Chrome options](https://github.com/facebook/php-webdriver/wiki/ChromeOptions) (like adding extensions) can be passed as well.
 *
 * ```php
 * <?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();
 *     });
 * }
 * ```
 *
 * to make this work load `\Helper\Acceptance` before `WebDriver` in `acceptance.suite.yml`:
 *
 * ```yaml
 * modules:
 *     enabled:
 *         - \Helper\Acceptance
 *         - WebDriver
 * ```
 *
 * For instance, [**BrowserStack** cloud service](https://www.browserstack.com/automate/capabilities) may require a test name to be set in capabilities.
 * This is how it can be done via `_capabilities` method from `Helper\Acceptance`:
 *
 * ```php
 * <?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;
 *      });
 * }
 * ```
 * In this case, please ensure that `\Helper\Acceptance` is loaded before WebDriver so new capabilities could be applied.

Это похоже на те же ошибки, что и мой первоначальный вопрос:

  1. У некоторых тестов не установлены имена
  2. У некоторых тестов есть имя предыдущего набора тестов

РЕДАКТИРОВАТЬ: Причина, по которой это произошло, была в моей средеВ файле / определении устройства было объявлено

 modules:
  enabled:
   - WebDriver

Удаление определения включенного и веб-драйвера позволяет откатить файл accept.suite.yml, который затем работает правильно, как и предполагалось

...