Skip to content

Commit f7ac67a

Browse files
kbondnotFloran
andauthored
feat: Allow selectFieldOptions to deselect all values (#143)
Co-authored-by: Floran Brutel <[email protected]>
1 parent 66353b0 commit f7ac67a

File tree

4 files changed

+15
-0
lines changed

4 files changed

+15
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ $browser
142142
->selectField('Canada') // "radio" select
143143
->selectField('Type', 'Employee') // "select" single option
144144
->selectField('Notification', ['Email', 'SMS']) // "select" multiple options
145+
->selectField('Notification', []) // "un-select" all multiple options
145146
->attachFile('Photo', '/path/to/photo.jpg')
146147
->attachFile('Photo', ['/path/to/photo1.jpg', '/path/to/photo2.jpg']) // attach multiple files (if field supports this)
147148
->click('Submit')

src/Browser.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,12 @@ final public function selectFieldOption(string $selector, string $value): self
281281
*/
282282
final public function selectFieldOptions(string $selector, array $values): self
283283
{
284+
if (!$values) {
285+
$this->session->page()->fillField($selector, $values);
286+
287+
return $this;
288+
}
289+
284290
foreach ($values as $value) {
285291
$this->session()->page()->selectFieldOption($selector, $value, true);
286292
}

src/Browser/Session/Driver/PantherDriver.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,10 @@ public function setValue($xpath, $value): void
118118
$element = $this->crawlerElement($this->filteredCrawler($xpath));
119119
$jsNode = $this->jsNode($xpath);
120120

121+
if (!$value && 'select' === $element->getTagName() && $element->getAttribute('multiple')) {
122+
$this->executeScript(\sprintf('%s.selectedIndex = -1', $jsNode));
123+
}
124+
121125
if ('input' === $element->getTagName() && \in_array($element->getAttribute('type'), ['date', 'time', 'color'])) {
122126
$this->executeScript(\sprintf('%s.value = \'%s\'', $jsNode, $value));
123127
} else {

tests/BrowserTests.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,7 @@ public function form_actions_by_field_label(): void
389389
->selectFieldOption('Input 4', 'option 2')
390390
->attachFile('Input 5', new \SplFileInfo(__FILE__))
391391
->selectFieldOptions('Input 6', ['option 1', 'option 3'])
392+
->selectFieldOptions('Input 7', [])
392393
->checkField('Radio 3')
393394
->click('Submit')
394395
->assertOn('/submit-form')
@@ -398,6 +399,7 @@ public function form_actions_by_field_label(): void
398399
->assertContains('"input_4":"option 2"')
399400
->assertContains(\sprintf('"input_5":"%s"', \pathinfo(__FILE__, \PATHINFO_BASENAME)))
400401
->assertContains('"input_6":["option 1","option 3"]')
402+
->assertNotContains('"input_7')
401403
->assertContains('"input_8":"option 3"')
402404
;
403405
}
@@ -415,6 +417,7 @@ public function form_actions_by_field_id(): void
415417
->selectFieldOption('input4', 'option 2')
416418
->attachFile('input5', __FILE__)
417419
->selectFieldOptions('input6', ['option 1', 'option 3'])
420+
->selectFieldOptions('input7', [])
418421
->checkField('radio3')
419422
->click('Submit')
420423
->assertOn('/submit-form')
@@ -424,6 +427,7 @@ public function form_actions_by_field_id(): void
424427
->assertContains('"input_4":"option 2"')
425428
->assertContains(\sprintf('"input_5":"%s"', \pathinfo(__FILE__, \PATHINFO_BASENAME)))
426429
->assertContains('"input_6":["option 1","option 3"]')
430+
->assertNotContains('"input_7')
427431
->assertContains('"input_8":"option 3"')
428432
;
429433
}

0 commit comments

Comments
 (0)