Skip to content

Commit

Permalink
feat: Allow selectFieldOptions to deselect all values (#143)
Browse files Browse the repository at this point in the history
Co-authored-by: Floran Brutel <[email protected]>
  • Loading branch information
kbond and notFloran authored Feb 7, 2024
1 parent 66353b0 commit f7ac67a
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 0 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ $browser
->selectField('Canada') // "radio" select
->selectField('Type', 'Employee') // "select" single option
->selectField('Notification', ['Email', 'SMS']) // "select" multiple options
->selectField('Notification', []) // "un-select" all multiple options
->attachFile('Photo', '/path/to/photo.jpg')
->attachFile('Photo', ['/path/to/photo1.jpg', '/path/to/photo2.jpg']) // attach multiple files (if field supports this)
->click('Submit')
Expand Down
6 changes: 6 additions & 0 deletions src/Browser.php
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,12 @@ final public function selectFieldOption(string $selector, string $value): self
*/
final public function selectFieldOptions(string $selector, array $values): self
{
if (!$values) {
$this->session->page()->fillField($selector, $values);

return $this;
}

foreach ($values as $value) {
$this->session()->page()->selectFieldOption($selector, $value, true);
}
Expand Down
4 changes: 4 additions & 0 deletions src/Browser/Session/Driver/PantherDriver.php
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,10 @@ public function setValue($xpath, $value): void
$element = $this->crawlerElement($this->filteredCrawler($xpath));
$jsNode = $this->jsNode($xpath);

if (!$value && 'select' === $element->getTagName() && $element->getAttribute('multiple')) {
$this->executeScript(\sprintf('%s.selectedIndex = -1', $jsNode));
}

if ('input' === $element->getTagName() && \in_array($element->getAttribute('type'), ['date', 'time', 'color'])) {
$this->executeScript(\sprintf('%s.value = \'%s\'', $jsNode, $value));
} else {
Expand Down
4 changes: 4 additions & 0 deletions tests/BrowserTests.php
Original file line number Diff line number Diff line change
Expand Up @@ -389,6 +389,7 @@ public function form_actions_by_field_label(): void
->selectFieldOption('Input 4', 'option 2')
->attachFile('Input 5', new \SplFileInfo(__FILE__))
->selectFieldOptions('Input 6', ['option 1', 'option 3'])
->selectFieldOptions('Input 7', [])
->checkField('Radio 3')
->click('Submit')
->assertOn('/submit-form')
Expand All @@ -398,6 +399,7 @@ public function form_actions_by_field_label(): void
->assertContains('"input_4":"option 2"')
->assertContains(\sprintf('"input_5":"%s"', \pathinfo(__FILE__, \PATHINFO_BASENAME)))
->assertContains('"input_6":["option 1","option 3"]')
->assertNotContains('"input_7')
->assertContains('"input_8":"option 3"')
;
}
Expand All @@ -415,6 +417,7 @@ public function form_actions_by_field_id(): void
->selectFieldOption('input4', 'option 2')
->attachFile('input5', __FILE__)
->selectFieldOptions('input6', ['option 1', 'option 3'])
->selectFieldOptions('input7', [])
->checkField('radio3')
->click('Submit')
->assertOn('/submit-form')
Expand All @@ -424,6 +427,7 @@ public function form_actions_by_field_id(): void
->assertContains('"input_4":"option 2"')
->assertContains(\sprintf('"input_5":"%s"', \pathinfo(__FILE__, \PATHINFO_BASENAME)))
->assertContains('"input_6":["option 1","option 3"]')
->assertNotContains('"input_7')
->assertContains('"input_8":"option 3"')
;
}
Expand Down

0 comments on commit f7ac67a

Please sign in to comment.