PainterCreatePage.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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. *
  53. * @return Browser
  54. */
  55. public function fill(Browser $browser, array $input)
  56. {
  57. return $browser->with('@form', function (Browser $browser) use ($input) {
  58. $inputKeys = [
  59. 'username',
  60. 'bio',
  61. ];
  62. foreach ($input as $key => $value) {
  63. if (in_array($key, $inputKeys, true)) {
  64. $browser->type($key, $value);
  65. continue;
  66. }
  67. if ($key === 'paintings') {
  68. $browser->within(new HasMany($key), function (Browser $browser) use ($value) {
  69. foreach ($value as $input) {
  70. $browser->add();
  71. $browser->withLastFormGroup(function (Browser $browser) use ($input) {
  72. foreach ($input as $k => $v) {
  73. $browser->fillFieldValue($k, $v);
  74. }
  75. });
  76. }
  77. });
  78. }
  79. }
  80. });
  81. }
  82. /**
  83. * 提交表单.
  84. *
  85. * @param Browser $browser
  86. *
  87. * @return Browser
  88. */
  89. public function submit(Browser $browser)
  90. {
  91. return $browser->with('@form', function (Browser $browser) {
  92. $browser->press(__('admin.submit'));
  93. $browser->waitForTextInBody(__('admin.save_succeeded'), 2);
  94. $browser->waitForLocation(admin_base_path('tests/painters'), 1);
  95. });
  96. }
  97. }