BatchActions.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <?php
  2. namespace Tests\Browser\Components\Grid;
  3. use Laravel\Dusk\Browser;
  4. use Tests\Browser\Components\Component;
  5. /**
  6. * 批量操作.
  7. */
  8. class BatchActions extends Component
  9. {
  10. protected $gridName;
  11. protected $prefix;
  12. public function __construct($gridName = '')
  13. {
  14. $this->gridName = $gridName;
  15. $this->prefix = $gridName ? $gridName.'-' : '';
  16. }
  17. /**
  18. * 获取组件的 root selector.
  19. *
  20. * @return string
  21. */
  22. public function selector()
  23. {
  24. return '@container';
  25. }
  26. /**
  27. * 浏览器包含组件的断言
  28. *
  29. * @param Browser $browser
  30. * @return void
  31. */
  32. public function assert(Browser $browser)
  33. {
  34. }
  35. /**
  36. * 读取组件的元素快捷方式.
  37. *
  38. * @return array
  39. */
  40. public function elements()
  41. {
  42. $container = ".{$this->prefix}grid-select-all-btn";
  43. return [
  44. '@container' => $container,
  45. '@btn' => '.btn',
  46. '@menu' => '.dropdown-menu',
  47. '@item' => '.dropdown-menu .dropdown-item',
  48. ];
  49. }
  50. /**
  51. * 判断按钮是否已显示.
  52. *
  53. * @param Browser $browser
  54. * @param null $number
  55. *
  56. * @return Browser
  57. */
  58. public function shown(Browser $browser, $number = null)
  59. {
  60. if ($number) {
  61. $browser->waitForText(str_replace('{n}', $number, __('admin.grid_items_selected')), 1);
  62. }
  63. $browser->whenElementAvailable('@btn', 1);
  64. return $browser;
  65. }
  66. /**
  67. * 显示菜单.
  68. *
  69. * @param Browser $browser
  70. * @param int $seconds
  71. *
  72. * @return Browser
  73. */
  74. public function open(Browser $browser)
  75. {
  76. $this->shown($browser);
  77. $browser->script(
  78. <<<JS
  79. $('{$this->formatSelector($browser)}').addClass('show');
  80. JS
  81. );
  82. $browser->whenElementAvailable('@menu', 1);
  83. return $browser;
  84. }
  85. /**
  86. * 关闭菜单.
  87. *
  88. * @param Browser $browser
  89. * @param int $seconds
  90. *
  91. * @return Browser
  92. */
  93. public function close(Browser $browser)
  94. {
  95. $this->shown($browser);
  96. $browser->script(
  97. <<<JS
  98. $('{$this->formatSelector($browser)}').removeClass('show');
  99. JS
  100. );
  101. return $browser;
  102. }
  103. /**
  104. * 点击选项.
  105. *
  106. * @param Browser $browser
  107. * @param string $value
  108. *
  109. * @return Browser
  110. */
  111. public function choose(Browser $browser, $value)
  112. {
  113. $browser->with('@menu', function (Browser $browser) use ($value) {
  114. $browser->clickLink($value);
  115. });
  116. return $browser;
  117. }
  118. }