9 use Magento\Mtf\Client\Locator;
10 use Magento\Mtf\Client\ElementInterface;
49 protected $childOptgroup =
".//following-sibling::optgroup[%d][@label='%s']";
70 protected $option =
'.//option[text()="%s"]';
98 protected $indent =
"\xC2\xA0\xC2\xA0\xC2\xA0\xC2\xA0";
115 $this->deselectAll();
131 $optionElement = $this->
find(sprintf($this->uiOptionText,
$option), Locator::SELECTOR_XPATH);
132 if ($optionElement->isVisible()) {
133 if (!$optionElement->isSelected()) {
134 $optionElement->click();
140 $optgroupIndent =
'';
145 $optionIndent = $isOptgroup ? $this->indent :
'';
146 $optionElement = $context->find(sprintf($this->option, $optionIndent .
$value), Locator::SELECTOR_XPATH);
147 if ($optionElement->isVisible()) {
148 if (!$optionElement->isSelected()) {
149 $optionElement->click();
163 throw new \Exception(
"Can't find option \"{$option}\".");
176 $optgroup = $context->find(sprintf($this->optgroupByLabel,
$value), Locator::SELECTOR_XPATH);
177 if (!$optgroup->isVisible()) {
178 throw new \Exception(
"Can't find group \"{$value}\".");
197 $optgroup = $context->find(sprintf($this->nextOptgroup,
$count), Locator::SELECTOR_XPATH);
198 if (!$optgroup->isVisible()) {
199 throw new \Exception(
"Can't find child group \"{$value}\"");
204 Locator::SELECTOR_XPATH
221 public function getValue()
224 $indentOption = str_repeat(
' ', self::INDENT_LENGTH);
230 $optionText =
$option->getText();
233 if (0 !== strpos($optionText, $indentOption)) {
238 $pathOptgroup = sprintf($this->parentOptgroup, $this->indent .
$optionValue);
239 $optgroup = $this->
find($pathOptgroup, Locator::SELECTOR_XPATH);
240 $optgroupText = $optgroup->getAttribute(
'label');
241 $optgroupValue = trim($optgroupText, $this->trim);
242 $amountIndent = strlen($optgroupText) - strlen($optgroupValue);
243 $amountIndent = $amountIndent ? ($amountIndent / strlen($this->indent)) : 0;
244 $value[] = $optgroupValue;
245 if (0 == $amountIndent) {
251 $indent = $amountIndent ? str_repeat($this->indent, $amountIndent) :
'';
252 $pathOptgroup .= sprintf($this->precedingOptgroup, $amountIndent * self::INDENT_LENGTH,
$indent);
253 while (0 <= $amountIndent && $this->
find($pathOptgroup, Locator::SELECTOR_XPATH)->isVisible()) {
254 $optgroup = $this->
find($pathOptgroup, Locator::SELECTOR_XPATH);
255 $optgroupText = $optgroup->getAttribute(
'label');
256 $optgroupValue = trim($optgroupText, $this->trim);
257 $value[] = $optgroupValue;
260 $indent = (0 < $amountIndent) ? str_repeat($this->indent, $amountIndent) :
'';
261 $pathOptgroup .= sprintf($this->precedingOptgroup, $amountIndent * self::INDENT_LENGTH,
$indent);
280 $option = $this->
find(sprintf($this->optionByNumber, $countOption), Locator::SELECTOR_XPATH);
284 $option = $this->
find(sprintf($this->optionByNumber, $countOption), Locator::SELECTOR_XPATH);
288 $optgroup = $this->
find(sprintf($this->optgroupByNumber, $countOptgroup), Locator::SELECTOR_XPATH);
289 while ($optgroup->isVisible()) {
292 sprintf($this->childOptionByNumber, $countOptgroup, $countOption),
293 Locator::SELECTOR_XPATH
299 sprintf($this->childOptionByNumber, $countOptgroup, $countOption),
300 Locator::SELECTOR_XPATH
305 $optgroup = $this->
find(sprintf($this->optgroupByNumber, $countOptgroup), Locator::SELECTOR_XPATH);
331 public function deselectAll()
taxRateField find('.mselect-list') .on( 'click.mselect-edit'
getOptgroup($value, ElementInterface $context)
getChildOptgroup($value, ElementInterface $context)