PainterCreatePage.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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. ->with(new HasMany('paintings'), function (Browser $browser) {
  28. // 点击新增
  29. $browser->add();
  30. // 点击删除
  31. $browser->removeLast();
  32. });
  33. });
  34. }
  35. /**
  36. * Get the element shortcuts for the page.
  37. *
  38. * @return array
  39. */
  40. public function elements()
  41. {
  42. return [
  43. '@form' => 'form[method="POST"]',
  44. ];
  45. }
  46. /**
  47. * 注入表单.
  48. *
  49. * @param Browser $browser
  50. * @param array $input
  51. *
  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->script(
  73. <<<JS
  74. $('{$browser->resolver->format('.'.$k)}').val('$v');
  75. JS
  76. );
  77. }
  78. });
  79. }
  80. });
  81. }
  82. }
  83. });
  84. }
  85. /**
  86. * 提交表单.
  87. *
  88. * @param Browser $browser
  89. *
  90. * @return Browser
  91. */
  92. public function submit(Browser $browser)
  93. {
  94. return $browser->with('@form', function (Browser $browser) {
  95. $browser->press(__('admin.submit'));
  96. $browser->waitForTextInBody(__('admin.save_succeeded'), 2);
  97. $browser->waitForLocation(admin_base_path('tests/painters'), 1);
  98. });
  99. }
  100. }