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
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Mtf\Client\Element;
use Magento\Mtf\Client\Locator;
/**
* Toggle element in the backend.
* Switches value between YES and NO.
*/
class SwitcherElement extends SimpleElement
{
/**
* XPath locator of the parent container.
*
* @var string
*/
protected $parentContainer = 'parent::div[@data-role="switcher"]';
/**
* XPath selector for label text on switcher element.
*
* @var string
*/
private $labelText = './following-sibling::label';
/**
* Set value to Yes or No.
*
* @param string $value Yes|No
* @return void
*/
public function setValue($value)
{
if (($value != 'Yes') && ($value != 'No')) {
throw new \UnexpectedValueException(
sprintf('Switcher element accepts only "Yes" and "No" values.')
);
}
if ($value != $this->getValue()) {
$this->find($this->labelText, Locator::SELECTOR_XPATH)->click();
}
}
/**
* Get the current value.
*
* @return string 'Yes'|'No'
* @throws \Exception
*/
public function getValue()
{
if ($this->find($this->parentContainer, 'xpath')->find('input:checked')->isVisible()) {
return 'Yes';
} elseif ($this->find($this->parentContainer, 'xpath')->find('input')->isVisible()) {
return 'No';
} else {
throw new \Exception(
sprintf('Element %s not found on page', $this->getLocator())
);
}
}
}