@@ -34,14 +34,29 @@ public function __markAsBrowserTest(): void
3434 /**
3535 * Browse to the given URL.
3636 *
37- * @template TUrl of array<int, string>|string
37+ * @template TUrl of array<int, string|Page >|string|Page
3838 *
3939 * @param TUrl $url
4040 * @param array<string, mixed> $options
41- * @return (TUrl is array<int, string> ? ArrayablePendingAwaitablePage : PendingAwaitablePage)
41+ * @return (TUrl is array<int, string|Page > ? ArrayablePendingAwaitablePage : PendingAwaitablePage)
4242 */
43- public function visit (array |string $ url , array $ options = []): ArrayablePendingAwaitablePage |PendingAwaitablePage
43+ public function visit (array |string | Page $ url , array $ options = []): ArrayablePendingAwaitablePage |PendingAwaitablePage
4444 {
45+ if ($ url instanceof Page) {
46+ $ options = [
47+ ...$ this ->pageTimezone ($ url ),
48+ ...$ this ->pageLocale ($ url ),
49+ ...$ options ,
50+ ];
51+
52+ return new PendingAwaitablePage (
53+ $ url ->browserType (),
54+ $ url ->device (),
55+ $ url ,
56+ $ options ,
57+ );
58+ }
59+
4560 if (is_string ($ url )) {
4661 return new PendingAwaitablePage (
4762 Playwright::defaultBrowserType (),
@@ -52,12 +67,39 @@ public function visit(array|string $url, array $options = []): ArrayablePendingA
5267 }
5368
5469 return new ArrayablePendingAwaitablePage (
55- array_map (fn (string $ singleUrl ): PendingAwaitablePage => new PendingAwaitablePage (
56- Playwright::defaultBrowserType (),
57- Device::DESKTOP ,
58- $ singleUrl ,
59- $ options ,
60- ), $ url ),
70+ array_map (fn (string |Page $ singleUrl ): PendingAwaitablePage => $ this ->visit ($ singleUrl , $ options ), $ url ),
6171 );
6272 }
73+
74+ /**
75+ * Get the locale from page.
76+ *
77+ * @return array{locale?: string}
78+ */
79+ private function pageLocale (Page $ page ): array
80+ {
81+ $ locale = $ page ->locale ();
82+
83+ if ($ locale === '' ) {
84+ return [];
85+ }
86+
87+ return ['locale ' => $ locale ];
88+ }
89+
90+ /**
91+ * Get the timezone from page.
92+ *
93+ * @return array{timezoneId?: string}
94+ */
95+ private function pageTimezone (Page $ page ): array
96+ {
97+ $ timezone = $ page ->timezone ();
98+
99+ if ($ timezone === '' ) {
100+ return [];
101+ }
102+
103+ return ['timezoneId ' => $ timezone ];
104+ }
63105}
0 commit comments