PainterCreatePage.php 2.8 KB

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