PainterCreatePage.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <?php
  2. namespace Tests\Browser\Pages;
  3. use Dcat\Admin\Form\Field;
  4. use Laravel\Dusk\Browser;
  5. use Tests\Browser\Components\Form\Field\HasMany;
  6. class PainterCreatePage extends Page
  7. {
  8. /**
  9. * Get the URL for the page.
  10. *
  11. * @return string
  12. */
  13. public function url()
  14. {
  15. return admin_base_path('tests/painters/create');
  16. }
  17. /**
  18. * Assert that the browser is on the page.
  19. *
  20. * @param Browser $browser
  21. * @return void
  22. */
  23. public function assert(Browser $browser)
  24. {
  25. $browser->assertPathIs($this->url())
  26. ->with('@form', function (Browser $browser) {
  27. $browser->assertSeeText('Paintings')
  28. ->scrollToBottom()
  29. ->with(new HasMany('paintings'), function (Browser $browser) {
  30. // 点击新增
  31. $browser->add();
  32. // 点击删除
  33. $browser->removeLast();
  34. });
  35. });
  36. }
  37. /**
  38. * Get the element shortcuts for the page.
  39. *
  40. * @return array
  41. */
  42. public function elements()
  43. {
  44. return [
  45. '@form' => 'form[method="POST"]',
  46. ];
  47. }
  48. /**
  49. * 注入表单.
  50. *
  51. * @param Browser $browser
  52. * @param array $input
  53. *
  54. * @return Browser
  55. */
  56. public function fill(Browser $browser, array $input)
  57. {
  58. return $browser->with('@form', function (Browser $browser) use ($input) {
  59. $inputKeys = [
  60. 'username',
  61. 'bio',
  62. ];
  63. foreach ($input as $key => $value) {
  64. if (in_array($key, $inputKeys, true)) {
  65. $browser->type($key, $value);
  66. continue;
  67. }
  68. if ($key === 'paintings') {
  69. $browser->within(new HasMany($key), function (Browser $browser) use ($value) {
  70. foreach ($value as $input) {
  71. $browser->add();
  72. $browser->withLastFormGroup(function (Browser $browser) use ($input) {
  73. foreach ($input as $k => $v) {
  74. $browser->script(
  75. <<<JS
  76. $('{$browser->resolver->format('.'.Field::FIELD_CLASS_PREFIX.$k)}').val('$v');
  77. JS
  78. );
  79. }
  80. });
  81. }
  82. });
  83. }
  84. }
  85. });
  86. }
  87. /**
  88. * 提交表单.
  89. *
  90. * @param Browser $browser
  91. *
  92. * @return Browser
  93. */
  94. public function submit(Browser $browser)
  95. {
  96. return $browser->with('@form', function (Browser $browser) {
  97. $browser->press(__('admin.submit'));
  98. $browser->waitForTextInBody(__('admin.save_succeeded'), 2);
  99. $browser->waitForLocation(admin_base_path('tests/painters'), 1);
  100. });
  101. }
  102. }