Delete.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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. *
  47. * @return Browser
  48. */
  49. public function delete(Browser $browser, $value)
  50. {
  51. $parent = $this->formatSelector($browser, '@item');
  52. if (is_numeric($value)) {
  53. $selector = "$('{$parent}').eq($value)";
  54. } else {
  55. $value = admin_url($value);
  56. $selector = "$('{$parent}[data-url=\"{$value}\"]')";
  57. }
  58. $browser->script(
  59. <<<JS
  60. // 如果开启了 responsive 插件,需要隐藏复制的 table,否则会选中副本的删除按钮
  61. $('.sticky-table-header').hide();
  62. {$selector}.click();
  63. JS
  64. );
  65. $this->waitForConfirmDialog($browser);
  66. $this->clickConfirmButton($browser);
  67. $this->waitForSucceeded($browser);
  68. return $browser;
  69. }
  70. /**
  71. * 等待确认弹窗.
  72. *
  73. * @param \Laravel\Dusk\Browser $browser
  74. *
  75. * @return \Laravel\Dusk\Browser
  76. */
  77. public function waitForConfirmDialog(Browser $browser)
  78. {
  79. return $browser->waitForText(__('admin.delete_confirm'), 1);
  80. }
  81. /**
  82. * 等待成功信息.
  83. *
  84. * @param \Laravel\Dusk\Browser $browser
  85. *
  86. * @return \Laravel\Dusk\Browser
  87. */
  88. public function waitForSucceeded(Browser $browser)
  89. {
  90. $browser->waitForText(__('admin.delete_succeeded'), 2);
  91. return $browser;
  92. }
  93. /**
  94. * 点击确认删除按钮.
  95. *
  96. * @param \Laravel\Dusk\Browser $browser
  97. *
  98. * @return \Laravel\Dusk\Browser
  99. */
  100. public function clickConfirmButton(Browser $browser)
  101. {
  102. $browser->script("$('{$this->formatSelector($browser, '@confirm')}').first().click()");
  103. return $browser;
  104. }
  105. }