JquerytreeElement.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Mtf\Client\Element;
  7. use Magento\Mtf\Client\ElementInterface;
  8. use Magento\Mtf\Client\Locator;
  9. /**
  10. * Typified element class for JqueryTree elements.
  11. */
  12. class JquerytreeElement extends Tree
  13. {
  14. /**
  15. * Root element.
  16. *
  17. * @var string
  18. */
  19. protected $rootElement = '//div[contains(@class, "tree x-tree jstree")]';
  20. /**
  21. * Pattern for level node.
  22. *
  23. * @var string
  24. */
  25. protected $level = '/ul/li[contains(@class, "jstree")]';
  26. /**
  27. * Pattern for child element node.
  28. *
  29. * @var string
  30. */
  31. protected $pattern = '/ul/li[contains(@class, "jstree") and a[text() = "%s"]]';
  32. /**
  33. * Pattern for child open node.
  34. *
  35. * @var string
  36. */
  37. protected $openNode = '//li[contains(@class, "jstree-open") and a[text() = "%s"]]';
  38. /**
  39. * Pattern for child closed node.
  40. *
  41. * @var string
  42. */
  43. protected $closedNode = '//li[contains(@class, "jstree-closed") and a[text() = "%s"]]';
  44. /**
  45. * Selector for parent element.
  46. *
  47. * @var string
  48. */
  49. protected $parentElement = './../../../a';
  50. /**
  51. * Selector for input.
  52. *
  53. * @var string
  54. */
  55. protected $input = '/a/ins[@class="jstree-checkbox"]';
  56. /**
  57. * Selected checkboxes.
  58. *
  59. * @var string
  60. */
  61. protected $selectedLabels = '//li[contains(@class, "jstree-checked")]/a';
  62. /**
  63. * Selected checkboxes by level.
  64. *
  65. * @var string
  66. */
  67. protected $selectedLabelsByLevel = '/ul/li[contains(@class, "jstree-checked")]/a';
  68. /**
  69. * Display children.
  70. *
  71. * @param string $element
  72. * @return void
  73. */
  74. protected function displayChildren($element)
  75. {
  76. $element = $this->find(sprintf($this->openNode, $element), Locator::SELECTOR_XPATH);
  77. if ($element->isVisible()) {
  78. return;
  79. }
  80. $plusButton = $this->find(sprintf($this->closedNode, $element) . $this->input, Locator::SELECTOR_XPATH);
  81. if ($plusButton->isVisible()) {
  82. $plusButton->click();
  83. $this->waitLoadChildren($element);
  84. }
  85. }
  86. /**
  87. * Get element label.
  88. *
  89. * @param ElementInterface $element
  90. * @return string
  91. */
  92. protected function getElementLabel(ElementInterface $element)
  93. {
  94. return trim($element->getText());
  95. }
  96. /**
  97. * Get structure.
  98. *
  99. * @param int|null $level
  100. * @return array
  101. */
  102. public function getStructure($level = null)
  103. {
  104. $nodesSelector = $this->getNodesSelector($level);
  105. $nodes = $this->getElements($nodesSelector, Locator::SELECTOR_XPATH);
  106. return $this->prepareValues($nodes);
  107. }
  108. /**
  109. * Get nodes selector.
  110. *
  111. * @param int|null $level
  112. * @return string
  113. */
  114. protected function getNodesSelector($level)
  115. {
  116. $selector = $this->rootElement;
  117. if ($level !== null) {
  118. for ($i = 1; $i < $level; $i++) {
  119. $selector .= $this->level;
  120. }
  121. $selector .= $this->selectedLabelsByLevel;
  122. } else {
  123. $selector .= $this->selectedLabels;
  124. }
  125. return $selector;
  126. }
  127. }