Tree.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <?php
  2. namespace Tests\Browser\Components\Form\Field;
  3. use Laravel\Dusk\Browser;
  4. use Tests\Browser\Components\Component;
  5. class Tree extends Component
  6. {
  7. protected $name;
  8. public function __construct($name = null)
  9. {
  10. $this->name = $name;
  11. }
  12. /**
  13. * 获取组件的 root selector
  14. *
  15. * @return string
  16. */
  17. public function selector()
  18. {
  19. return ".{$this->name}-tree-wrapper";
  20. }
  21. /**
  22. * 浏览器包含组件的断言
  23. *
  24. * @param Browser $browser
  25. * @return void
  26. */
  27. public function assert(Browser $browser)
  28. {
  29. $browser
  30. ->whenElementAvailable('@tree', 2)
  31. ->hasInput($this->name);
  32. }
  33. /**
  34. * 读取组件的元素快捷方式
  35. *
  36. * @return array
  37. */
  38. public function elements()
  39. {
  40. return [
  41. '@container' => $this->selector(),
  42. '@tree' => "{$this->selector()} .da-tree",
  43. '@input' => sprintf('input[name="%s"][type="hidden"]', $this->name),
  44. ];
  45. }
  46. /**
  47. * 选中下拉选框
  48. *
  49. * @param Browser $browser
  50. * @param mixed $values
  51. *
  52. * @return Browser
  53. */
  54. public function choose(Browser $browser, $values)
  55. {
  56. $values = json_encode((array) $values);
  57. $browser->script(<<<JS
  58. var tree = $('{$this->getTreeSelector($browser)}');
  59. tree.jstree("uncheck_all");
  60. tree.jstree("select_node", {$values});
  61. JS
  62. );
  63. return $browser;
  64. }
  65. /**
  66. * 选中所有
  67. *
  68. * @param Browser $browser
  69. *
  70. * @return Browser
  71. */
  72. public function checkAll(Browser $browser)
  73. {
  74. $browser->script(<<<JS
  75. $('{$this->getTreeSelector($browser)}').jstree("check_all");
  76. JS
  77. );
  78. return $browser;
  79. }
  80. /**
  81. * 取消选中所有
  82. *
  83. * @param Browser $browser
  84. *
  85. * @return Browser
  86. */
  87. public function unCheckAll(Browser $browser)
  88. {
  89. $browser->script(<<<JS
  90. $('{$this->getTreeSelector($browser)}').jstree("uncheck_all");
  91. JS
  92. );
  93. return $browser;
  94. }
  95. /**
  96. * @param \Laravel\Dusk\Browser $browser
  97. *
  98. * @return string
  99. */
  100. protected function getTreeSelector(Browser $browser)
  101. {
  102. return $this->formatSelector($browser, $this->elements()['@tree']);
  103. }
  104. }