Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
SuggestElement.php
Go to the documentation of this file.
1 <?php
8 
9 use Magento\Mtf\Client\Locator;
10 
14 class SuggestElement extends SimpleElement
15 {
19  const BACKSPACE = "\xEE\x80\x83";
20 
26  protected $advancedSelect = '[data-role="advanced-select"]';
27 
33  protected $selectInput = '[data-role="advanced-select-text"]';
34 
40  protected $searchResult = '.mage-suggest-dropdown';
41 
47  protected $resultItem = './/ul/li/a[text()="%s"]';
48 
54  protected $searchLabel = '[data-action="advanced-select-search"]';
55 
61  protected $closeButton = '[data-action="close-advanced-select"]';
62 
68  protected $searchedCount = '[class*=search-count]';
69 
76  public function setValue($value)
77  {
78  $this->eventManager->dispatchEvent(['set_value'], [__METHOD__, $this->getAbsoluteSelector()]);
79 
80  $this->clear();
81 
82  if ($value == '') {
83  return;
84  }
85  $this->keys([$value]);
86  $searchedItem = $this->find(sprintf($this->resultItem, $value), Locator::SELECTOR_XPATH);
87  $searchedCountElements = $this->find($this->searchedCount);
88  $this->waitUntil(
89  function () use ($searchedCountElements) {
90  return $searchedCountElements->isVisible() ? true : null;
91  }
92  );
93  $searchedItem->click();
94  $closeButton = $this->find($this->closeButton);
95  if ($closeButton->isVisible()) {
96  $closeButton->click();
97  }
98  }
99 
106  public function keys(array $keys)
107  {
108  if (!$this->find($this->selectInput)->isVisible()) {
109  $this->find($this->advancedSelect)->click();
110  }
111  $input = $this->find($this->selectInput);
112  $input->click();
113  $input->keys($keys);
114  $this->searchResult();
115  }
116 
122  protected function clear()
123  {
124  $element = $this->find($this->advancedSelect);
125  while ($element->getValue() != '') {
126  $element->keys([self::BACKSPACE]);
127  }
128  }
129 
135  public function searchResult()
136  {
137  $this->find($this->searchLabel)->click();
138  }
139 
145  public function getValue()
146  {
147  $this->eventManager->dispatchEvent(['get_value'], [__METHOD__, $this->getAbsoluteSelector()]);
148 
149  return $this->find($this->advancedSelect)->getValue();
150  }
151 
159  {
160  $needle = $this->find($this->searchResult)->find(sprintf($this->resultItem, $value), Locator::SELECTOR_XPATH);
161  $keys = str_split($value);
162  $this->keys($keys);
163  if ($needle->isVisible()) {
164  try {
165  return true;
166  } catch (\Exception $e) {
167  // In parallel run on windows change the focus is lost on element
168  // that causes disappearing of attribute suggest list.
169  }
170  }
171 
172  return false;
173  }
174 }
taxRateField find('.mselect-list') .on( 'click.mselect-edit'
Definition: edit.phtml:162
$value
Definition: gender.phtml:16
$element
Definition: element.phtml:12