-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathCustomCapabilitiesResolver.php
71 lines (62 loc) · 2.75 KB
/
CustomCapabilitiesResolver.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<?php declare(strict_types=1);
namespace My\Steward;
use Facebook\WebDriver\Chrome\ChromeOptions;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\WebDriverBrowserType;
use Lmc\Steward\ConfigProvider;
use Lmc\Steward\Selenium\CustomCapabilitiesResolverInterface;
use Lmc\Steward\Test\AbstractTestCase;
use OndraM\CiDetector\CiDetector;
/**
* You can define capabilities for one test run using the `--capability` option of `steward run` command. However,
* if you need some custom logic logic or when you need some global capabilities which don't differ between runs,
* you can implement the CustomCapabilitiesResolverInterface.
*
* Then you must specify the Resolver in steward.yml configuration file like this:
* `capabilities_resolver: My\Steward\CapabilitiesResolver`
*
* @see /~https://github.com/lmc-eu/steward/wiki/Set-custom-capabilities
*/
class CustomCapabilitiesResolver implements CustomCapabilitiesResolverInterface
{
/** @var ConfigProvider */
private $config;
public function __construct(ConfigProvider $config)
{
$this->config = $config;
}
public function resolveDesiredCapabilities(
AbstractTestCase $test,
DesiredCapabilities $capabilities
): DesiredCapabilities {
// Capability defined for all test runs
$capabilities->setCapability('pageLoadStrategy', 'normal');
// Capability only for specific browser
if ($this->config->browserName === WebDriverBrowserType::IE) {
$capabilities->setCapability('ms:someEdgeCapability', 'true');
}
// When on CI, enabled headless mode of Chrome/Firefox
if ((new CiDetector())->isCiDetected()) {
if ($this->config->browserName === WebDriverBrowserType::CHROME) {
$chromeOptions = new ChromeOptions();
// In headless Chrome 60, window size cannot be changed run-time:
// https://bugs.chromium.org/p/chromium/issues/detail?id=604324#c46
// --no-sandbox is workaround for Chrome crashing: /~https://github.com/SeleniumHQ/selenium/issues/4961
$chromeOptions->addArguments(['--headless', 'window-size=1024,768', '--no-sandbox']);
$capabilities->setCapability(ChromeOptions::CAPABILITY, $chromeOptions);
} elseif ($this->config->browserName === WebDriverBrowserType::FIREFOX) {
$capabilities->setCapability(
'moz:firefoxOptions',
['args' => ['-headless']]
);
}
}
return $capabilities;
}
public function resolveRequiredCapabilities(
AbstractTestCase $test,
DesiredCapabilities $capabilities
): DesiredCapabilities {
return $capabilities;
}
}