Skip to content

Commit 5be7ce6

Browse files
committed
Merge remote-tracking branch 'origin/main' into chore/depend-on-interfaces
2 parents a6cb630 + 8bee0da commit 5be7ce6

File tree

4 files changed

+58
-38
lines changed

4 files changed

+58
-38
lines changed

src/WebdriverClassicDriver.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -993,7 +993,7 @@ private function executeJsOnXpath(
993993
* @throws DriverException
994994
*/
995995
private function executeJsOnElement(
996-
$element,
996+
WebDriverElement $element,
997997
#[Language('JavaScript')]
998998
string $script
999999
) {
@@ -1070,7 +1070,7 @@ private function getWindowHandleFromName(string $name): string
10701070
* @param TWebDriverElement $element
10711071
* @throws DriverException
10721072
*/
1073-
private function clickOnElement($element): void
1073+
private function clickOnElement(WebDriverElement $element): void
10741074
{
10751075
$element->getLocationOnScreenOnceScrolledIntoView();
10761076
$element->click();
@@ -1124,7 +1124,7 @@ private function findElement(
11241124
* @param TWebDriverElement $element
11251125
* @throws DriverException
11261126
*/
1127-
private function selectRadioValue($element, string $value): void
1127+
private function selectRadioValue(WebDriverElement $element, string $value): void
11281128
{
11291129
try {
11301130
(new WebDriverRadios($element))->selectByValue($value);
@@ -1143,7 +1143,7 @@ private function selectRadioValue($element, string $value): void
11431143
* @param TWebDriverElement $element
11441144
* @throws DriverException
11451145
*/
1146-
private function selectOptionOnElement($element, string $value, bool $multiple = false): void
1146+
private function selectOptionOnElement(WebDriverElement $element, string $value, bool $multiple = false): void
11471147
{
11481148
try {
11491149
$select = new WebDriverSelect($element);
@@ -1174,7 +1174,7 @@ private function selectOptionOnElement($element, string $value, bool $multiple =
11741174
* @param TWebDriverElement $element
11751175
* @throws DriverException
11761176
*/
1177-
private function deselectAllOptions($element): void
1177+
private function deselectAllOptions(WebDriverElement $element): void
11781178
{
11791179
try {
11801180
(new WebDriverSelect($element))->deselectAll();
@@ -1193,7 +1193,7 @@ private function deselectAllOptions($element): void
11931193
* @throws DriverException
11941194
*/
11951195
private function ensureInputType(
1196-
$element,
1196+
WebDriverElement $element,
11971197
#[Language('XPath')]
11981198
string $xpath,
11991199
string $type,
@@ -1237,7 +1237,7 @@ private function jsonEncode($value, string $action, string $field): string
12371237
* @param mixed $value
12381238
* @throws DriverException
12391239
*/
1240-
private function setElementDomProperty($element, string $property, $value): void
1240+
private function setElementDomProperty(WebDriverElement $element, string $property, $value): void
12411241
{
12421242
$this->executeJsOnElement(
12431243
$element,
@@ -1250,7 +1250,7 @@ private function setElementDomProperty($element, string $property, $value): void
12501250
* @return mixed
12511251
* @throws DriverException
12521252
*/
1253-
private function getElementDomProperty($element, string $property)
1253+
private function getElementDomProperty(WebDriverElement $element, string $property)
12541254
{
12551255
try {
12561256
return $this->isW3cCompliant()

tests/Custom/CapabilityTest.php

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@
22

33
namespace Mink\WebdriverClassicDriver\Tests\Custom;
44

5-
use Facebook\WebDriver\Remote\RemoteWebDriver;
6-
use Facebook\WebDriver\WebDriverOptions;
7-
use Facebook\WebDriver\WebDriverTimeouts;
5+
use Mink\WebdriverClassicDriver\Tests\WebDriverMockingTrait;
86
use Mink\WebdriverClassicDriver\WebdriverClassicDriver;
97

108
/**
119
* @phpstan-import-type TCapabilities from WebdriverClassicDriver
1210
*/
1311
class CapabilityTest extends \PHPUnit\Framework\TestCase
1412
{
13+
use WebDriverMockingTrait;
14+
1515
/**
1616
* @param TCapabilities $desiredCapabilities
1717
* @param TCapabilities $expectedCapabilities
@@ -20,11 +20,7 @@ class CapabilityTest extends \PHPUnit\Framework\TestCase
2020
*/
2121
public function testThatCapabilitiesAreAsExpected(string $browserName, array $desiredCapabilities, array $expectedCapabilities): void
2222
{
23-
$mockWebDriver = $this->createMock(RemoteWebDriver::class);
24-
$mockWebDriverOptions = $this->createMock(WebDriverOptions::class);
25-
$mockWebDriverTimeouts = $this->createMock(WebDriverTimeouts::class);
26-
$mockWebDriver->method('manage')->willReturn($mockWebDriverOptions);
27-
$mockWebDriverOptions->method('timeouts')->willReturn($mockWebDriverTimeouts);
23+
$mockWebDriver = $this->createMockWebDriver();
2824

2925
$actualCapabilities = null;
3026
$driver = new WebdriverClassicDriver(

tests/Custom/WebDriverTest.php

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
namespace Mink\WebdriverClassicDriver\Tests\Custom;
44

55
use Behat\Mink\Exception\DriverException;
6-
use Facebook\WebDriver\Remote\RemoteWebDriver;
76
use Facebook\WebDriver\Remote\RemoteWebElement;
8-
use Facebook\WebDriver\WebDriverOptions;
9-
use Facebook\WebDriver\WebDriverTimeouts;
7+
use Mink\WebdriverClassicDriver\Tests\WebDriverMockingTrait;
108
use Mink\WebdriverClassicDriver\WebdriverClassicDriver;
119

1210
class WebDriverTest extends TestCase
1311
{
12+
use WebDriverMockingTrait;
13+
1414
public function testDriverMustBeStartedBeforeUse(): void
1515
{
1616
$this->expectException(DriverException::class);
@@ -39,11 +39,9 @@ public function testStartedDriverCannotBeSubsequentlyStarted(): void
3939

4040
public function testDriverCatchesUpstreamErrorsDuringStart(): void
4141
{
42-
$driver = $this->createPartialMock(WebdriverClassicDriver::class, ['createWebDriver', 'getWebDriver']);
43-
$driver
44-
->expects($this->once())
45-
->method('createWebDriver')
46-
->willThrowException(new \RuntimeException('An upstream error'));
42+
$driver = new WebdriverClassicDriver('fake browser', [], 'example.com', function () {
43+
throw new \RuntimeException('An upstream error');
44+
});
4745

4846
$this->expectException(DriverException::class);
4947
$this->expectExceptionMessage('Could not start driver: An upstream error');
@@ -53,15 +51,11 @@ public function testDriverCatchesUpstreamErrorsDuringStart(): void
5351

5452
public function testDriverCatchesUpstreamErrorsDuringStop(): void
5553
{
56-
$driver = $this->createPartialMock(WebdriverClassicDriver::class, ['createWebDriver', 'isStarted', 'getWebDriver']);
57-
$driver
58-
->expects($this->once())
59-
->method('isStarted')
60-
->willReturn(true);
61-
$driver
62-
->expects($this->once())
63-
->method('getWebDriver')
64-
->willThrowException(new \RuntimeException('An upstream error'));
54+
$mockWebDriver = $this->createMockWebDriver();
55+
$mockWebDriver->method('quit')->willThrowException(new \RuntimeException('An upstream error'));
56+
$driver = new WebdriverClassicDriver('fake browser', [], 'example.com', fn() => $mockWebDriver);
57+
58+
$driver->start();
6559

6660
$this->expectException(DriverException::class);
6761
$this->expectExceptionMessage('Could not close connection: An upstream error');
@@ -79,12 +73,8 @@ public function testClassicDriverCanProvideBrowserName(): void
7973

8074
public function testThatDriverCatchesUnexpectedAttributeValueType(): void
8175
{
82-
$mockWebDriver = $this->createMock(RemoteWebDriver::class);
83-
$mockWebDriverOptions = $this->createMock(WebDriverOptions::class);
84-
$mockWebDriverTimeouts = $this->createMock(WebDriverTimeouts::class);
76+
$mockWebDriver = $this->createMockWebDriver();
8577
$mockElement = $this->createMock(RemoteWebElement::class);
86-
$mockWebDriver->method('manage')->willReturn($mockWebDriverOptions);
87-
$mockWebDriverOptions->method('timeouts')->willReturn($mockWebDriverTimeouts);
8878
$mockWebDriver
8979
->expects($this->once())
9080
->method('findElement')

tests/WebDriverMockingTrait.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
namespace Mink\WebdriverClassicDriver\Tests;
4+
5+
use Facebook\WebDriver\Remote\RemoteWebDriver;
6+
use Facebook\WebDriver\WebDriverOptions;
7+
use Facebook\WebDriver\WebDriverTimeouts;
8+
use PHPUnit\Framework\MockObject\MockObject;
9+
10+
trait WebDriverMockingTrait
11+
{
12+
/**
13+
* @template T
14+
* @param class-string<T> $class
15+
* @return T&MockObject
16+
*/
17+
abstract function createMock(string $class): object;
18+
19+
/**
20+
* @return RemoteWebDriver&MockObject
21+
*/
22+
private function createMockWebDriver(): RemoteWebDriver
23+
{
24+
$mockWebDriverTimeouts = $this->createMock(WebDriverTimeouts::class);
25+
26+
$mockWebDriverOptions = $this->createMock(WebDriverOptions::class);
27+
$mockWebDriverOptions->method('timeouts')->willReturn($mockWebDriverTimeouts);
28+
29+
$mockWebDriver = $this->createMock(RemoteWebDriver::class);
30+
$mockWebDriver->method('manage')->willReturn($mockWebDriverOptions);
31+
32+
return $mockWebDriver;
33+
}
34+
}

0 commit comments

Comments
 (0)