BatchActions.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  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. * @return Browser
  56. */
  57. public function shown(Browser $browser, $number = null)
  58. {
  59. if ($number) {
  60. $browser->waitForText(str_replace('{n}', $number, __('admin.grid_items_selected')), 1);
  61. }
  62. $browser->whenElementAvailable('@btn', 1);
  63. return $browser;
  64. }
  65. /**
  66. * 显示菜单.
  67. *
  68. * @param Browser $browser
  69. * @param int $seconds
  70. * @return Browser
  71. */
  72. public function open(Browser $browser)
  73. {
  74. $this->shown($browser);
  75. $browser->script(
  76. <<<JS
  77. $('{$this->formatSelector($browser)}').addClass('show');
  78. JS
  79. );
  80. $browser->whenElementAvailable('@menu', 1);
  81. return $browser;
  82. }
  83. /**
  84. * 关闭菜单.
  85. *
  86. * @param Browser $browser
  87. * @param int $seconds
  88. * @return Browser
  89. */
  90. public function close(Browser $browser)
  91. {
  92. $this->shown($browser);
  93. $browser->script(
  94. <<<JS
  95. $('{$this->formatSelector($browser)}').removeClass('show');
  96. JS
  97. );
  98. return $browser;
  99. }
  100. /**
  101. * 点击选项.
  102. *
  103. * @param Browser $browser
  104. * @param string $value
  105. * @return Browser
  106. */
  107. public function choose(Browser $browser, $value)
  108. {
  109. $browser->with('@menu', function (Browser $browser) use ($value) {
  110. $browser->clickLink($value);
  111. });
  112. return $browser;
  113. }
  114. }