Delete.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. namespace Tests\Browser\Components\Grid\Actions;
  3. use Laravel\Dusk\Browser;
  4. use Tests\Browser\Components\Component;
  5. /**
  6. * 删除动作.
  7. */
  8. class Delete extends Component
  9. {
  10. /**
  11. * 获取组件的 root selector.
  12. *
  13. * @return string
  14. */
  15. public function selector()
  16. {
  17. return '';
  18. }
  19. /**
  20. * 浏览器包含组件的断言
  21. *
  22. * @param Browser $browser
  23. * @return void
  24. */
  25. public function assert(Browser $browser)
  26. {
  27. }
  28. /**
  29. * 读取组件的元素快捷方式.
  30. *
  31. * @return array
  32. */
  33. public function elements()
  34. {
  35. return [
  36. '@item' => 'a[data-action="delete"]:visible',
  37. '@confirm' => '.swal2-confirm',
  38. '@cancel' => '.swal2-cancel',
  39. ];
  40. }
  41. /**
  42. * 选中.
  43. *
  44. * @param Browser $browser
  45. * @param string|array $value
  46. * @return Browser
  47. */
  48. public function delete(Browser $browser, $value)
  49. {
  50. $parent = $this->formatSelector($browser, '@item');
  51. if (is_numeric($value)) {
  52. $selector = "$('{$parent}').eq($value)";
  53. } else {
  54. $value = admin_url($value);
  55. $selector = "$('{$parent}[data-url=\"{$value}\"]')";
  56. }
  57. $browser->script(
  58. <<<JS
  59. // 如果开启了 responsive 插件,需要隐藏复制的 table,否则会选中副本的删除按钮
  60. $('.sticky-table-header').hide();
  61. {$selector}.click();
  62. JS
  63. );
  64. $this->waitForConfirmDialog($browser);
  65. $this->clickConfirmButton($browser);
  66. $this->waitForSucceeded($browser);
  67. return $browser;
  68. }
  69. /**
  70. * 等待确认弹窗.
  71. *
  72. * @param \Laravel\Dusk\Browser $browser
  73. * @return \Laravel\Dusk\Browser
  74. */
  75. public function waitForConfirmDialog(Browser $browser)
  76. {
  77. return $browser->waitForText(__('admin.delete_confirm'), 1);
  78. }
  79. /**
  80. * 等待成功信息.
  81. *
  82. * @param \Laravel\Dusk\Browser $browser
  83. * @return \Laravel\Dusk\Browser
  84. */
  85. public function waitForSucceeded(Browser $browser)
  86. {
  87. $browser->waitForText(__('admin.delete_succeeded'), 2);
  88. return $browser;
  89. }
  90. /**
  91. * 点击确认删除按钮.
  92. *
  93. * @param \Laravel\Dusk\Browser $browser
  94. * @return \Laravel\Dusk\Browser
  95. */
  96. public function clickConfirmButton(Browser $browser)
  97. {
  98. $browser->script("$('{$this->formatSelector($browser, '@confirm')}').first().click()");
  99. return $browser;
  100. }
  101. }