Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature] Add enumerator/iteraterables to Locator #12336

Closed
kapros opened this issue Feb 24, 2022 · 11 comments
Closed

[Feature] Add enumerator/iteraterables to Locator #12336

kapros opened this issue Feb 24, 2022 · 11 comments

Comments

@kapros
Copy link

kapros commented Feb 24, 2022

Hey Team,

I think the Locator feature is really great, but what I think it lacks is some kind of enumeration. There are evaluations and stuff like getting text from all elements, but that's only a limited use case. While it is possible for us to enumerate by ourselves, I think we could benefit much more from a built in enumerator instead of opting for a for loop. This would allow plugging into more useful features of supported languages for working with collections much easier.

It would then be possible to enumerate in:

  • Node.js
  • .NET
  • Python
  • and probably Java
@mxschmitt mxschmitt changed the title [Feature] Add enumerator to Locator [Feature] Add enumerator/iteraterables to Locator Mar 8, 2022
@sarut0bi
Copy link

sarut0bi commented May 3, 2022

something like

  async locators(): Promise<Locator[]> {
	let ret = [];
	for(int index=0;i<this._frame._queryCount(this._selector);++index)
	  ret.push(new Locator(this._frame, this._selector + ` >> nth=${index}`));
    return ret;
  }

in playwright-main\packages\playwright-core\src\client\locator.ts ?

@kapros
Copy link
Author

kapros commented May 3, 2022

something like

  async locators(): Promise<Locator[]> {
	let ret = [];
	for(int index=0;i<this._frame._queryCount(this._selector);++index)
	  ret.push(new Locator(this._frame, this._selector + ` >> nth=${index}`));
    return ret;
  }

in playwright-main\packages\playwright-core\src\client\locator.ts ?

pretty much, not sure about the exact technicalities like whether it should post or preincrement and whether it should use _frame._queryCount or the locator's built in count

@jfgreffier
Copy link
Contributor

Isn't it already available? I think it was implemented with locator.count() and locator.nth(index)

https://playwright.dev/docs/api/class-locator#locator-count
https://playwright.dev/docs/api/class-locator#locator-nth

I think this issue can be closed. What do you think @kapros ?

@kapros
Copy link
Author

kapros commented Sep 28, 2022

Isn't it already available? I think it was implemented with locator.count() and locator.nth(index)

https://playwright.dev/docs/api/class-locator#locator-count https://playwright.dev/docs/api/class-locator#locator-nth

I think this issue can be closed. What do you think @kapros ?

Hi @jfgreffier, not really, the issue is about returning an enumerable / iterable object (so that you can use a foreach / forOf loop, the functions you linked allow you to iterate yourself with a standard for loop. Not like this is problematic, but on the other hand, just like mentioned, an iterable would allow using language builtins for working with lists/arrays and so on.

@jfgreffier
Copy link
Contributor

I don't see this as necessary, as it can probably be done in the user land. Also, there are several ways to manipulate Locator lists https://playwright.dev/docs/locators#lists

@sarut0bi
Copy link

If you follow this mindset quite everything can be made in user land :/
Seems to be very useful for a lot of people according to newly created issues

@vitalics
Copy link

vitalics commented Sep 30, 2022

As for me, iterables are important feature. it's not every-day feature, but i found quite useful this feature, since in my project - we are works with excel-like tables. All elements are divs, we need to iterate each of them and get each value separately and assert each of them.

So my conclusion - this is a useful feature for tables and data-type representations in browser.

In my project we define function which do the same as for toArray method.

@dmg46664
Copy link

This would make using Playwright from Clojure a pleasure, instead it's a pain.
java.lang.Iterable is immediately converted to sequable under the covers in Clojure, to be used in a functional way.
As Clojure is not meant to be used in an imperative way, a straight for loop is not easy to fit into a lazy pipeline (bread and butter and idiomatic stuff in Clojure, even if the laziness needs to be consumed immediately given the backing locator).

@dmg46664
Copy link

dmg46664 commented Oct 27, 2022

A helper function for all Clojurists to copy and paste and reuse until such time as this issue is resolved.

(defn seq-locs
  "Just remember to extract all of it before the locator changes"
  ([locator] (seq-locs locator 0))
  ([locator n] (lazy-seq (if (< n (.count locator))
                           (cons (.nth locator n) (seq-locs locator (inc n)))
                           '()
))))

@fersarr
Copy link

fersarr commented Nov 11, 2022

In Python, not being able to natively enumerate, iterate on (collection[i]) or use locators in for-each loops makes the code seem really non-idiomatic and non-intuitive. Not being able to call len(collection) is really weird too. Definitely important. Here's an ugly patch to make it feel better:

# patch non-idiomatic playwright by adding support for 'len()', 'collection[i]' and 'for i in collection'
playwright.sync_api._generated.Locator.__len__ = lambda x: x.count()
playwright.sync_api._generated.Locator.__getitem__ = lambda self, idx: self.nth(idx)
playwright.sync_api._generated.Locator.__iter__ = lambda x: (x.nth(i) for i in range(x.count()))
  • Note: this is only for the sync version of the API. For async it's a bit trickier

@vitalics
Copy link

vitalics commented Dec 19, 2022

Already implemented enumerator in 1.29 version. For Reference: #11909 .

P.S. Im disappointed on playwright team, since when i was asking a question for "public roadmap". They was asking - "look at the tags for future version". See at #17409 . Okay, am look at the 1.29 version, no issues related 1.29 and enumerator feature implementation.

Github issues at 19 Dec 2022 16:30 GMT+4 API call [ { "url": "https://api.github.com/repos//issues/19543", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19543/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19543/comments", "events_url": "https://api.github.com/repos//issues/19543/events", "html_url": "https://github.com//issues/19543", "id": 1501667477, "node_id": "I_kwDODTssw85ZgaCV", "number": 19543, "title": "[BUG] Cannot install webkit deps on debian 11 linux arm64", "user": { "login": "tekumara", "id": 125105, "node_id": "MDQ6VXNlcjEyNTEwNQ==", "avatar_url": "https://avatars.githubusercontent.com/u/125105?v=4", "gravatar_id": "", "url": "https://api.github.com/users/tekumara", "html_url": "https://github.com/tekumara", "followers_url": "https://api.github.com/users/tekumara/followers", "following_url": "https://api.github.com/users/tekumara/following{/other_user}", "gists_url": "https://api.github.com/users/tekumara/gists{/gist_id}", "starred_url": "https://api.github.com/users/tekumara/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/tekumara/subscriptions", "organizations_url": "https://api.github.com/users/tekumara/orgs", "repos_url": "https://api.github.com/users/tekumara/repos", "events_url": "https://api.github.com/users/tekumara/events{/privacy}", "received_events_url": "https://api.github.com/users/tekumara/received_events", "type": "User", "site_admin": false }, "labels": [], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 3, "created_at": "2022-12-18T00:29:30Z", "updated_at": "2022-12-19T10:22:29Z", "closed_at": "2022-12-19T10:22:02Z", "author_association": "NONE", "active_lock_reason": null, "body": "I'm using python:3.9 debian bullseye on arm64:\r\n\r\n```\r\n❯ docker run --rm -it --entrypoint /bin/bash python:3.9 -c \"pip install playwright && playwright install webkit --with-deps\"\r\nCollecting playwright\r\n Downloading playwright-1.28.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (32.9 MB)\r\n ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 32.9/32.9 MB 5.9 MB/s eta 0:00:00\r\nCollecting greenlet==2.0.1\r\n Downloading greenlet-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (526 kB)\r\n ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 526.1/526.1 KB 7.1 MB/s eta 0:00:00\r\nCollecting pyee==9.0.4\r\n Downloading pyee-9.0.4-py2.py3-none-any.whl (14 kB)\r\nCollecting typing-extensions\r\n Downloading typing_extensions-4.4.0-py3-none-any.whl (26 kB)\r\nInstalling collected packages: typing-extensions, greenlet, pyee, playwright\r\nSuccessfully installed greenlet-2.0.1 playwright-1.28.0 pyee-9.0.4 typing-extensions-4.4.0\r\nWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\r\nWARNING: You are using pip version 22.0.4; however, version 22.3.1 is available.\r\nYou should consider upgrading via the '/usr/local/bin/python -m pip install --upgrade pip' command.\r\nBEWARE: your OS is not officially supported by Playwright; installing dependencies for Ubuntu as a fallback.\r\nInstalling dependencies...\r\nGet:1 http://deb.debian.org/debian bullseye InRelease [116 kB]\r\nGet:2 http://deb.debian.org/debian-security bullseye-security InRelease [48.4 kB]\r\nGet:3 http://deb.debian.org/debian bullseye-updates InRelease [44.1 kB]\r\nGet:4 http://deb.debian.org/debian bullseye/main arm64 Packages [8072 kB]\r\nGet:5 http://deb.debian.org/debian-security bullseye-security/main arm64 Packages [206 kB]\r\nGet:6 http://deb.debian.org/debian bullseye-updates/main arm64 Packages [12.0 kB]\r\nFetched 8498 kB in 2s (3407 kB/s) \r\nReading package lists... Done\r\nReading package lists... Done\r\nBuilding dependency tree... Done\r\nReading state information... Done\r\nNote, selecting 'libfontconfig1' instead of 'libfontconfig'\r\nPackage ttf-ubuntu-font-family is not available, but is referred to by another package.\r\nThis may mean that the package is missing, has been obsoleted, or\r\nis only available from another source\r\n\r\nPackage libjpeg-turbo8 is not available, but is referred to by another package.\r\nThis may mean that the package is missing, has been obsoleted, or\r\nis only available from another source\r\n\r\nE: Unable to locate package libenchant1c2a\r\nE: Unable to locate package libicu66\r\nE: Package 'libjpeg-turbo8' has no installation candidate\r\nE: Package 'ttf-ubuntu-font-family' has no installation candidate\r\nFailed to install browsers\r\nError: Installation process exited with code: 100\r\n```", "reactions": { "url": "https://api.github.com/repos//issues/19543/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19543/timeline", "performed_via_github_app": null, "state_reason": "completed" }, { "url": "https://api.github.com/repos//issues/19536", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19536/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19536/comments", "events_url": "https://api.github.com/repos//issues/19536/events", "html_url": "https://github.com//issues/19536", "id": 1501016242, "node_id": "I_kwDODTssw85Zd7Cy", "number": 19536, "title": "[Question] Equivalents of jest.fn() and jest.spyOn() in Playwright?", "user": { "login": "caleb531", "id": 872474, "node_id": "MDQ6VXNlcjg3MjQ3NA==", "avatar_url": "https://avatars.githubusercontent.com/u/872474?v=4", "gravatar_id": "", "url": "https://api.github.com/users/caleb531", "html_url": "https://github.com/caleb531", "followers_url": "https://api.github.com/users/caleb531/followers", "following_url": "https://api.github.com/users/caleb531/following{/other_user}", "gists_url": "https://api.github.com/users/caleb531/gists{/gist_id}", "starred_url": "https://api.github.com/users/caleb531/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/caleb531/subscriptions", "organizations_url": "https://api.github.com/users/caleb531/orgs", "repos_url": "https://api.github.com/users/caleb531/repos", "events_url": "https://api.github.com/users/caleb531/events{/privacy}", "received_events_url": "https://api.github.com/users/caleb531/received_events", "type": "User", "site_admin": false }, "labels": [ { "id": 2518858583, "node_id": "MDU6TGFiZWwyNTE4ODU4NTgz", "url": "https://api.github.com/repos/microsoft/playwright/labels/triaging", "name": "triaging", "color": "666666", "default": false, "description": "" } ], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 2, "created_at": "2022-12-16T23:43:13Z", "updated_at": "2022-12-17T00:25:35Z", "closed_at": "2022-12-17T00:25:35Z", "author_association": "NONE", "active_lock_reason": null, "body": "Hi,\r\n\r\nI have written integration-style tests before using Jest, where I made use of `jest.fn()` and `jest.spyOn()` to check if certain methods have been called, for example:\r\n\r\n```ts\r\njest.spyOn(supabase.auth.signIn).mockImplementation(async () => {\r\n return { authenticated: true };\r\n});\r\n// ...\r\nexpect(supabase.auth.signIn).toHaveBeenCalledWith({\r\n email: 'me@example.com',\r\n password: '12345' // just for testing; don't ever use a password like this\r\n});\r\n```\r\n\r\nHowever, I have really struggled to find equivalents in Playwright. The closest thing I could find was [the documentation on Mock APIs](https://playwright.dev/docs/mock), but that's not quite the same thing because I may need to disable behavior (e.g. overriding `window.location.reload()` to be a no-op).\r\n\r\nTo work around this, I am currently using the sinon package, but it's not my favorite because I have to create many custom matchers (e.g. `toHaveBeenCalled`, `toHaveBeenCalledOnce`, etc.) to achieve the desired readability (as opposed to something like `expect(stub.calledWith(1, 2, 3)).toBe(true)`.\r\n\r\nSo, are there equivalents to `jest.fn()` and `jest.spyOn()` in Playwright? If not, why is that?\r\n\r\nThanks in advance!\r\nCaleb\r\n", "reactions": { "url": "https://api.github.com/repos//issues/19536/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19536/timeline", "performed_via_github_app": null, "state_reason": "completed" }, { "url": "https://api.github.com/repos//issues/19533", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19533/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19533/comments", "events_url": "https://api.github.com/repos//issues/19533/events", "html_url": "https://github.com//pull/19533", "id": 1500740942, "node_id": "PR_kwDODTssw85Fq0Gz", "number": 19533, "title": "cherry-pick(#19532): docs: remove Serializable from Route.*.postData in java", "user": { "login": "yury-s", "id": 9798949, "node_id": "MDQ6VXNlcjk3OTg5NDk=", "avatar_url": "https://avatars.githubusercontent.com/u/9798949?v=4", "gravatar_id": "", "url": "https://api.github.com/users/yury-s", "html_url": "https://github.com/yury-s", "followers_url": "https://api.github.com/users/yury-s/followers", "following_url": "https://api.github.com/users/yury-s/following{/other_user}", "gists_url": "https://api.github.com/users/yury-s/gists{/gist_id}", "starred_url": "https://api.github.com/users/yury-s/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/yury-s/subscriptions", "organizations_url": "https://api.github.com/users/yury-s/orgs", "repos_url": "https://api.github.com/users/yury-s/repos", "events_url": "https://api.github.com/users/yury-s/events{/privacy}", "received_events_url": "https://api.github.com/users/yury-s/received_events", "type": "User", "site_admin": false }, "labels": [], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 0, "created_at": "2022-12-16T19:17:33Z", "updated_at": "2022-12-16T19:21:53Z", "closed_at": "2022-12-16T19:21:52Z", "author_association": "MEMBER", "active_lock_reason": null, "draft": false, "pull_request": { "url": "https://api.github.com/repos/microsoft/playwright/pulls/19533", "html_url": "https://github.com//pull/19533", "diff_url": "https://github.com//pull/19533.diff", "patch_url": "https://github.com//pull/19533.patch", "merged_at": "2022-12-16T19:21:52Z" }, "body": null, "reactions": { "url": "https://api.github.com/repos//issues/19533/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19533/timeline", "performed_via_github_app": null, "state_reason": null }, { "url": "https://api.github.com/repos//issues/19532", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19532/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19532/comments", "events_url": "https://api.github.com/repos//issues/19532/events", "html_url": "https://github.com//pull/19532", "id": 1500705616, "node_id": "PR_kwDODTssw85Fqscr", "number": 19532, "title": "docs: remove Serializable from Route.*.postData in java", "user": { "login": "yury-s", "id": 9798949, "node_id": "MDQ6VXNlcjk3OTg5NDk=", "avatar_url": "https://avatars.githubusercontent.com/u/9798949?v=4", "gravatar_id": "", "url": "https://api.github.com/users/yury-s", "html_url": "https://github.com/yury-s", "followers_url": "https://api.github.com/users/yury-s/followers", "following_url": "https://api.github.com/users/yury-s/following{/other_user}", "gists_url": "https://api.github.com/users/yury-s/gists{/gist_id}", "starred_url": "https://api.github.com/users/yury-s/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/yury-s/subscriptions", "organizations_url": "https://api.github.com/users/yury-s/orgs", "repos_url": "https://api.github.com/users/yury-s/repos", "events_url": "https://api.github.com/users/yury-s/events{/privacy}", "received_events_url": "https://api.github.com/users/yury-s/received_events", "type": "User", "site_admin": false }, "labels": [], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 0, "created_at": "2022-12-16T18:50:08Z", "updated_at": "2022-12-16T19:14:30Z", "closed_at": "2022-12-16T19:14:30Z", "author_association": "MEMBER", "active_lock_reason": null, "draft": false, "pull_request": { "url": "https://api.github.com/repos/microsoft/playwright/pulls/19532", "html_url": "https://github.com//pull/19532", "diff_url": "https://github.com//pull/19532.diff", "patch_url": "https://github.com//pull/19532.patch", "merged_at": "2022-12-16T19:14:30Z" }, "body": "We only support String and byte[] and throw otherwise, align the types with it.", "reactions": { "url": "https://api.github.com/repos//issues/19532/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19532/timeline", "performed_via_github_app": null, "state_reason": null }, { "url": "https://api.github.com/repos//issues/19531", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19531/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19531/comments", "events_url": "https://api.github.com/repos//issues/19531/events", "html_url": "https://github.com//issues/19531", "id": 1500693576, "node_id": "I_kwDODTssw85ZcsRI", "number": 19531, "title": "[Question]Is there any other method without writing cookie info to a json file in the global-setup.ts file? Or How can I delete the storageState.json file after all the tests are finished? ", "user": { "login": "YusufOzturk-Development", "id": 43332307, "node_id": "MDQ6VXNlcjQzMzMyMzA3", "avatar_url": "https://avatars.githubusercontent.com/u/43332307?v=4", "gravatar_id": "", "url": "https://api.github.com/users/YusufOzturk-Development", "html_url": "https://github.com/YusufOzturk-Development", "followers_url": "https://api.github.com/users/YusufOzturk-Development/followers", "following_url": "https://api.github.com/users/YusufOzturk-Development/following{/other_user}", "gists_url": "https://api.github.com/users/YusufOzturk-Development/gists{/gist_id}", "starred_url": "https://api.github.com/users/YusufOzturk-Development/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/YusufOzturk-Development/subscriptions", "organizations_url": "https://api.github.com/users/YusufOzturk-Development/orgs", "repos_url": "https://api.github.com/users/YusufOzturk-Development/repos", "events_url": "https://api.github.com/users/YusufOzturk-Development/events{/privacy}", "received_events_url": "https://api.github.com/users/YusufOzturk-Development/received_events", "type": "User", "site_admin": false }, "labels": [], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 1, "created_at": "2022-12-16T18:41:08Z", "updated_at": "2022-12-17T00:51:55Z", "closed_at": "2022-12-17T00:51:55Z", "author_association": "NONE", "active_lock_reason": null, "body": "I m handling spec files with my **core.ts** file . My spec file is channels.e2e.spec. When these spec file called from npm script, it navigates to my **channels.e2e.ts**\r\n\r\n I am doing the login process in the global-setup.ts file. When the npm script runs, the authentication process is works good in global-setup.ts file. Everything is ok.\r\n\r\nBut problem is when global-setup run, storageState json file inludes my cookie and user info. this could be a security hole for my company. How can I delete the storageState.json file after all the tests are finished? Can you show an example according to my code, or is there any other method without writing cookie info to a json file in the global-setup.ts file?\r\n\r\n\r\n\r\n**my npm script**\r\n\r\n`\"pw:staging\": \"NAME=test@domain.com PASS=test npx playwright test channels.spec.ts\"`\r\n\r\n\r\n**this is my global-setup.ts** \r\n\r\n```\r\nimport LoginPageRepository from \"./playwright/pages/login\"\r\nimport { chromium, FullConfig } from '@playwright/test';\r\n\r\nasync function globalSetup(config: FullConfig) {\r\n const { baseURL, storageState, headless } = config.projects[0].use;\r\n const browser = await chromium.launch({ headless });\r\n const page = await browser.newPage();\r\n await page.goto(`${baseURL!}/login`)\r\n await page.locator(LoginPageRepository.emailTextField).type(process.env.NAME!)\r\n await page.locator(LoginPageRepository.passwordTextField).type(process.env.PASS!)\r\n await page.locator(LoginPageRepository.loginButton).click()\r\n await page.waitForTimeout(10000)\r\n\t\tawait page.context().storageState({ path: storageState as string });\r\n\t\tawait browser.close();\r\n\t\r\n\t}\r\n\r\n\r\nexport default globalSetup;\r\n```\r\n\r\n\r\n**this is my playwright.config.ts**\r\n```\r\nimport { type PlaywrightTestConfig, devices } from \"@playwright/test\";\r\nconst config: PlaywrightTestConfig = {\r\n globalSetup: require.resolve('./global-setup'),\r\n reporter: [ ['html', { outputFolder: 'report' }] ],\r\n use: {\r\n headless: false,\r\n baseURL: 'https://test/beta',\r\n storageState: 'storageState.json',\r\n ignoreHTTPSErrors: true\r\n },\r\n projects: [\r\n {\r\n name: \"chromium\",\r\n use: {\r\n ...devices[\"Desktop Chrome\"],\r\n launchOptions: {\r\n args: [\"--disable-web-security\"],\r\n },\r\n },\r\n }\r\n ],\r\n};\r\nexport default config;\r\n```\r\n\r\n**this is my channels.spec.ts file**;\r\n\r\n```\r\nimport Core from \"../../../../core\";\r\nimport { Identity } from \"./identity.api\";\r\n\r\nCore.create(\"Identity\", Identity);\r\n```\r\n\r\n\r\n**This is my channels.e2e.ts file** ;\r\n\r\n```\r\nimport { expect } from \"@playwright/test\"\r\nimport ChannelsPageRepository from \"../../pages/channels\"\r\nimport { Login } from \"../login/login.e2e\"\r\nimport { faker } from '@faker-js/faker';\r\nexport const Channels = {\r\n States: {\r\n fakeName:{} as string\r\n },\r\n API: {},\r\n UI: {\r\n NavigateChannelsPage: {\r\n id:1,\r\n notes:\"navigates channels page\",\r\n tag:\"\",\r\n run: async ({ page }) => {\r\n await page.locator(ChannelsPageRepository.channelsButton).click()\r\n await expect(page).toHaveURL(/\/channels/); \r\n \r\n }\r\n },\r\n ViewEmailChannels: {\r\n id:2,\r\n notes:\"click view my email channels button and navigate mail channels page\",\r\n tag:\"\",\r\n run: async ({ page }) => {\r\n await Channels.UI.NavigateChannelsPage.run({page})\r\n await page.locator(ChannelsPageRepository.viewMyEmailChannelButton).click()\r\n await expect(page).toHaveURL(/\/a_channels/)\r\n }\r\n },\r\n }\r\n}\r\n```\r\n\r\n**this my core.ts file (I am managing **all spec files** here using Core.create method)**\r\n\r\n```\r\nimport { test } from \"@playwright/test\";\r\n\r\nconst Core = {\r\n create(name: string, config: any) {\r\n return (() => {\r\n if (config.API) {\r\n test.describe(`${name}`, async () => {\r\n config.beforeAll && test.beforeAll(config.beforeAll);\r\n config.afterAll && test.afterAll(config.afterAll);\r\n config.beforeEach && test.beforeEach(config.beforeEach);\r\n config.afterEach && test.afterEach(config.afterEach);\r\n await Promise.all(\r\n Object.keys(config.API).map((t) => {\r\n let testContent = config.API[t];\r\n let desc = `API- ${t} - #${testContent.id}# - ${testContent.notes}`;\r\n let skip = testContent.skip || config.API.skip;\r\n let only = testContent.only;\r\n if (skip) {\r\n test.skip(desc, async () => {\r\n return testContent.run();\r\n });\r\n }\r\n if (only) {\r\n test.only(desc, async () => {\r\n return testContent.run();\r\n });\r\n }\r\n if (!skip && !only) {\r\n test(desc, async () => {\r\n return testContent.run();\r\n });\r\n }\r\n })\r\n );\r\n });\r\n }\r\n if (config.UI) {\r\n test.describe(`${name}`, async () => {\r\n config.beforeAll && test.beforeAll(config.beforeAll);\r\n config.afterAll && test.afterAll(config.afterAll);\r\n config.beforeEach && test.beforeEach(config.beforeEach);\r\n config.afterEach && test.afterEach(config.afterEach);\r\n await Promise.all(\r\n Object.keys(config.UI).map((c) => {\r\n let testContent = config.UI[c];\r\n let desc = `UI- ${c} - #${testContent.id}# - ${testContent.notes}`;\r\n let skip = testContent.skip || config.UI.skip;\r\n let only = testContent.only;\r\n if (skip) {\r\n test.skip(desc, async () => {\r\n return testContent.run();\r\n });\r\n }\r\n if (only) {\r\n test.only(desc, async () => {\r\n return testContent.run();\r\n });\r\n }\r\n if (!skip && !only) {\r\n test(desc, async ({ page }) => {\r\n return testContent.run({ page });\r\n });\r\n }\r\n })\r\n );\r\n });\r\n }\r\n })();\r\n },\r\n};\r\n\r\nexport default Core;\r\n\r\n```\r\n\r\n", "reactions": { "url": "https://api.github.com/repos//issues/19531/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19531/timeline", "performed_via_github_app": null, "state_reason": "completed" }, { "url": "https://api.github.com/repos//issues/19528", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19528/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19528/comments", "events_url": "https://api.github.com/repos//issues/19528/events", "html_url": "https://github.com//pull/19528", "id": 1500662818, "node_id": "PR_kwDODTssw85FqjUH", "number": 19528, "title": "cherry-pick(#19527): docs: route.fetch.postData in java", "user": { "login": "yury-s", "id": 9798949, "node_id": "MDQ6VXNlcjk3OTg5NDk=", "avatar_url": "https://avatars.githubusercontent.com/u/9798949?v=4", "gravatar_id": "", "url": "https://api.github.com/users/yury-s", "html_url": "https://github.com/yury-s", "followers_url": "https://api.github.com/users/yury-s/followers", "following_url": "https://api.github.com/users/yury-s/following{/other_user}", "gists_url": "https://api.github.com/users/yury-s/gists{/gist_id}", "starred_url": "https://api.github.com/users/yury-s/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/yury-s/subscriptions", "organizations_url": "https://api.github.com/users/yury-s/orgs", "repos_url": "https://api.github.com/users/yury-s/repos", "events_url": "https://api.github.com/users/yury-s/events{/privacy}", "received_events_url": "https://api.github.com/users/yury-s/received_events", "type": "User", "site_admin": false }, "labels": [], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 0, "created_at": "2022-12-16T18:15:37Z", "updated_at": "2022-12-16T18:16:41Z", "closed_at": "2022-12-16T18:16:40Z", "author_association": "MEMBER", "active_lock_reason": null, "draft": false, "pull_request": { "url": "https://api.github.com/repos/microsoft/playwright/pulls/19528", "html_url": "https://github.com//pull/19528", "diff_url": "https://github.com//pull/19528.diff", "patch_url": "https://github.com//pull/19528.patch", "merged_at": "2022-12-16T18:16:40Z" }, "body": null, "reactions": { "url": "https://api.github.com/repos//issues/19528/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19528/timeline", "performed_via_github_app": null, "state_reason": null }, { "url": "https://api.github.com/repos//issues/19527", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19527/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19527/comments", "events_url": "https://api.github.com/repos//issues/19527/events", "html_url": "https://github.com//pull/19527", "id": 1500654810, "node_id": "PR_kwDODTssw85Fqhku", "number": 19527, "title": "docs: route.fetch.postData in java", "user": { "login": "yury-s", "id": 9798949, "node_id": "MDQ6VXNlcjk3OTg5NDk=", "avatar_url": "https://avatars.githubusercontent.com/u/9798949?v=4", "gravatar_id": "", "url": "https://api.github.com/users/yury-s", "html_url": "https://github.com/yury-s", "followers_url": "https://api.github.com/users/yury-s/followers", "following_url": "https://api.github.com/users/yury-s/following{/other_user}", "gists_url": "https://api.github.com/users/yury-s/gists{/gist_id}", "starred_url": "https://api.github.com/users/yury-s/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/yury-s/subscriptions", "organizations_url": "https://api.github.com/users/yury-s/orgs", "repos_url": "https://api.github.com/users/yury-s/repos", "events_url": "https://api.github.com/users/yury-s/events{/privacy}", "received_events_url": "https://api.github.com/users/yury-s/received_events", "type": "User", "site_admin": false }, "labels": [], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 0, "created_at": "2022-12-16T18:09:26Z", "updated_at": "2022-12-16T18:14:04Z", "closed_at": "2022-12-16T18:14:03Z", "author_association": "MEMBER", "active_lock_reason": null, "draft": false, "pull_request": { "url": "https://api.github.com/repos/microsoft/playwright/pulls/19527", "html_url": "https://github.com//pull/19527", "diff_url": "https://github.com//pull/19527.diff", "patch_url": "https://github.com//pull/19527.patch", "merged_at": "2022-12-16T18:14:02Z" }, "body": null, "reactions": { "url": "https://api.github.com/repos//issues/19527/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19527/timeline", "performed_via_github_app": null, "state_reason": null }, { "url": "https://api.github.com/repos//issues/19521", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19521/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19521/comments", "events_url": "https://api.github.com/repos//issues/19521/events", "html_url": "https://github.com//pull/19521", "id": 1500560712, "node_id": "PR_kwDODTssw85FqNSd", "number": 19521, "title": "chery-pick(#19509): docs: fix locator all since version", "user": { "login": "playwrightmachine", "id": 89237858, "node_id": "MDQ6VXNlcjg5MjM3ODU4", "avatar_url": "https://avatars.githubusercontent.com/u/89237858?v=4", "gravatar_id": "", "url": "https://api.github.com/users/playwrightmachine", "html_url": "https://github.com/playwrightmachine", "followers_url": "https://api.github.com/users/playwrightmachine/followers", "following_url": "https://api.github.com/users/playwrightmachine/following{/other_user}", "gists_url": "https://api.github.com/users/playwrightmachine/gists{/gist_id}", "starred_url": "https://api.github.com/users/playwrightmachine/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/playwrightmachine/subscriptions", "organizations_url": "https://api.github.com/users/playwrightmachine/orgs", "repos_url": "https://api.github.com/users/playwrightmachine/repos", "events_url": "https://api.github.com/users/playwrightmachine/events{/privacy}", "received_events_url": "https://api.github.com/users/playwrightmachine/received_events", "type": "User", "site_admin": false }, "labels": [ { "id": 2992174511, "node_id": "MDU6TGFiZWwyOTkyMTc0NTEx", "url": "https://api.github.com/repos/microsoft/playwright/labels/CQ1", "name": "CQ1", "color": "BA2AAF", "default": false, "description": "" } ], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 0, "created_at": "2022-12-16T17:03:38Z", "updated_at": "2022-12-16T17:19:52Z", "closed_at": "2022-12-16T17:19:51Z", "author_association": "COLLABORATOR", "active_lock_reason": null, "draft": false, "pull_request": { "url": "https://api.github.com/repos/microsoft/playwright/pulls/19521", "html_url": "https://github.com//pull/19521", "diff_url": "https://github.com//pull/19521.diff", "patch_url": "https://github.com//pull/19521.patch", "merged_at": "2022-12-16T17:19:51Z" }, "body": "This PR cherry-picks the following commits:\n\n- 1e31afd", "reactions": { "url": "https://api.github.com/repos//issues/19521/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19521/timeline", "performed_via_github_app": null, "state_reason": null }, { "url": "https://api.github.com/repos//issues/19519", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19519/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19519/comments", "events_url": "https://api.github.com/repos//issues/19519/events", "html_url": "https://github.com//issues/19519", "id": 1500455014, "node_id": "I_kwDODTssw85ZbyBm", "number": 19519, "title": "[Question] is workerIndex consistent during tests?", "user": { "login": "vovsemenv", "id": 20096510, "node_id": "MDQ6VXNlcjIwMDk2NTEw", "avatar_url": "https://avatars.githubusercontent.com/u/20096510?v=4", "gravatar_id": "", "url": "https://api.github.com/users/vovsemenv", "html_url": "https://github.com/vovsemenv", "followers_url": "https://api.github.com/users/vovsemenv/followers", "following_url": "https://api.github.com/users/vovsemenv/following{/other_user}", "gists_url": "https://api.github.com/users/vovsemenv/gists{/gist_id}", "starred_url": "https://api.github.com/users/vovsemenv/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/vovsemenv/subscriptions", "organizations_url": "https://api.github.com/users/vovsemenv/orgs", "repos_url": "https://api.github.com/users/vovsemenv/repos", "events_url": "https://api.github.com/users/vovsemenv/events{/privacy}", "received_events_url": "https://api.github.com/users/vovsemenv/received_events", "type": "User", "site_admin": false }, "labels": [], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 1, "created_at": "2022-12-16T15:43:28Z", "updated_at": "2022-12-17T19:05:09Z", "closed_at": "2022-12-17T19:05:09Z", "author_association": "NONE", "active_lock_reason": null, "body": "Hello, at allure-report we have timeline view with all the used threads and timings. and this timeline uses workerIndex to determine which thread was used.\r\n\r\n\"image\"\r\n\r\n\r\nI found that workerIndex is not always consistent during tests. It can be reproduced when we have a lot of tests of when we repeat each multiple times.\r\n\r\n**So is it bug that workers have index more than total amount of workers??**\r\n\r\n\r\nreproduction\r\n\r\n``` bash\r\n❯ npm run test -- --repeat-each 5 \r\n\r\n> pw-primer@1.0.0 test\r\n> playwright test --repeat-each 5\r\n\r\nTotal workers: 2\r\ntesworker index: 0; testName: should allow me to mark all items as completed\r\ntesworker index: 1; testName: should allow me to clear the complete state of all items\r\ntesworker index: 1; testName: should allow me to add todo items\r\ntesworker index: 0; testName: complete all checkbox should update state when items are completed / cleared\r\ntesworker index: 1; testName: should clear text input field when an item is added\r\ntesworker index: 0; testName: should append new items to the bottom of the list\r\ntesworker index: 2; testName: should allow me to mark all items as completed\r\ntesworker index: 3; testName: should allow me to clear the complete state of all items\r\ntesworker index: 2; testName: complete all checkbox should update state when items are completed / cleared\r\ntesworker index: 3; testName: should allow me to add todo items\r\ntesworker index: 2; testName: should clear text input field when an item is added\r\ntesworker index: 3; testName: should append new items to the bottom of the list\r\ntesworker index: 4; testName: should allow me to mark all items as completed\r\ntesworker index: 5; testName: should allow me to clear the complete state of all items\r\ntesworker index: 4; testName: complete all checkbox should update state when items are completed / cleared\r\n```\r\n", "reactions": { "url": "https://api.github.com/repos//issues/19519/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19519/timeline", "performed_via_github_app": null, "state_reason": "completed" }, { "url": "https://api.github.com/repos//issues/19512", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19512/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19512/comments", "events_url": "https://api.github.com/repos//issues/19512/events", "html_url": "https://github.com//issues/19512", "id": 1500139058, "node_id": "I_kwDODTssw85Zak4y", "number": 19512, "title": "[Question] Global setup failing in Azure Pipelines", "user": { "login": "JuliusMoehring", "id": 44407680, "node_id": "MDQ6VXNlcjQ0NDA3Njgw", "avatar_url": "https://avatars.githubusercontent.com/u/44407680?v=4", "gravatar_id": "", "url": "https://api.github.com/users/JuliusMoehring", "html_url": "https://github.com/JuliusMoehring", "followers_url": "https://api.github.com/users/JuliusMoehring/followers", "following_url": "https://api.github.com/users/JuliusMoehring/following{/other_user}", "gists_url": "https://api.github.com/users/JuliusMoehring/gists{/gist_id}", "starred_url": "https://api.github.com/users/JuliusMoehring/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/JuliusMoehring/subscriptions", "organizations_url": "https://api.github.com/users/JuliusMoehring/orgs", "repos_url": "https://api.github.com/users/JuliusMoehring/repos", "events_url": "https://api.github.com/users/JuliusMoehring/events{/privacy}", "received_events_url": "https://api.github.com/users/JuliusMoehring/received_events", "type": "User", "site_admin": false }, "labels": [ { "id": 2518858583, "node_id": "MDU6TGFiZWwyNTE4ODU4NTgz", "url": "https://api.github.com/repos/microsoft/playwright/labels/triaging", "name": "triaging", "color": "666666", "default": false, "description": "" } ], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 4, "created_at": "2022-12-16T12:36:15Z", "updated_at": "2022-12-18T22:18:27Z", "closed_at": "2022-12-18T22:18:27Z", "author_association": "NONE", "active_lock_reason": null, "body": "Hi, its my first time using Playwright in combination with Azure DevOps and I am stuck making the tests run in the pipeline. \r\n\r\nI have followed the [documentation](https://playwright.dev/docs/ci#azure-pipelines) about CI and Azure Pipelines, but I still can make it run.\r\n\r\nI am using a `globalSetup.ts` file to login before running the tests.\r\n\r\n```typescript\r\nimport { chromium, expect } from '@playwright/test';\r\n\r\nconst globalSetup = async () => {\r\n const browser = await chromium.launch({ headless: true });\r\n const page = await browser.newPage();\r\n\r\n await page.goto('http://localhost:3000');\r\n\r\n // DO ALL THE LOGIN STUFF HERE \r\n\r\n // Save signed-in state to 'storageState.json'.\r\n await page.context().storageState({ path: './tests/playwright/storageState.json' });\r\n\r\n await browser.close();\r\n};\r\n\r\nexport default globalSetup;\r\n```\r\n\r\nIn the pipeline, I get a nice message from Playwright Team\r\n\r\n```bash\r\n╔════════════════════════════════════════════════════════════════════════════════════════════════╗\r\n║ Looks like you launched a headed browser without having a XServer running. ║\r\n║ Set either 'headless: true' or use 'xvfb-run ' before running Playwright. ║\r\n║ ║\r\n║ <3 Playwright Team ║\r\n╚════════════════════════════════════════════════════════════════════════════════════════════════╝\r\n```\r\n\r\nBut when checking back on my `globalSetup.ts`, I am starting chrome in headless mode already.\r\n\r\nDoes anybody know, why `chromium.launch({ headless: true });` is not launching the browser in headless mode?\r\n\r\nThanks for your help\r\n\r\nJulius", "reactions": { "url": "https://api.github.com/repos//issues/19512/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19512/timeline", "performed_via_github_app": null, "state_reason": "completed" }, { "url": "https://api.github.com/repos//issues/19511", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19511/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19511/comments", "events_url": "https://api.github.com/repos//issues/19511/events", "html_url": "https://github.com//issues/19511", "id": 1500136183, "node_id": "I_kwDODTssw85ZakL3", "number": 19511, "title": "[Question] Is there a way switching off Codegen highlight?", "user": { "login": "yagitk", "id": 96823945, "node_id": "U_kgDOBcVqiQ", "avatar_url": "https://avatars.githubusercontent.com/u/96823945?v=4", "gravatar_id": "", "url": "https://api.github.com/users/yagitk", "html_url": "https://github.com/yagitk", "followers_url": "https://api.github.com/users/yagitk/followers", "following_url": "https://api.github.com/users/yagitk/following{/other_user}", "gists_url": "https://api.github.com/users/yagitk/gists{/gist_id}", "starred_url": "https://api.github.com/users/yagitk/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/yagitk/subscriptions", "organizations_url": "https://api.github.com/users/yagitk/orgs", "repos_url": "https://api.github.com/users/yagitk/repos", "events_url": "https://api.github.com/users/yagitk/events{/privacy}", "received_events_url": "https://api.github.com/users/yagitk/received_events", "type": "User", "site_admin": false }, "labels": [], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 2, "created_at": "2022-12-16T12:33:23Z", "updated_at": "2022-12-19T06:28:31Z", "closed_at": "2022-12-17T18:36:53Z", "author_association": "NONE", "active_lock_reason": null, "body": "In a end-to-end test for a website, we are evaluating the usage of codegen.\r\nWhen using codegen, each object highlights red when mouse pointing.\r\n\r\nOn the other hand, we have requests to take screenshots of the webpage while using codegen.\r\nTaking screenshots will be done manually, because of manually testing first time at this point \r\nand codegen coding might not be complete, we want to take a screenshot.\r\nWhen taking screenshots the highlighting will been taken into the screenshot.\r\n\r\nQuestion is there a way to switch off the highlighting while codegen? \r\nEx. the codegen parameters.\r\n\r\nOr is there no way switching off the red highlighting when using the codegen.\r\n\r\nOne way is to stop recording, take a screenshot and start recording again,\r\nbut it is bothering stopping each time before pressing print screen.", "reactions": { "url": "https://api.github.com/repos//issues/19511/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19511/timeline", "performed_via_github_app": null, "state_reason": "completed" }, { "url": "https://api.github.com/repos//issues/19509", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19509/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19509/comments", "events_url": "https://api.github.com/repos//issues/19509/events", "html_url": "https://github.com//pull/19509", "id": 1500030239, "node_id": "PR_kwDODTssw85FoZGD", "number": 19509, "title": "docs: fix locator all since version", "user": { "login": "mxschmitt", "id": 17984549, "node_id": "MDQ6VXNlcjE3OTg0NTQ5", "avatar_url": "https://avatars.githubusercontent.com/u/17984549?v=4", "gravatar_id": "", "url": "https://api.github.com/users/mxschmitt", "html_url": "https://github.com/mxschmitt", "followers_url": "https://api.github.com/users/mxschmitt/followers", "following_url": "https://api.github.com/users/mxschmitt/following{/other_user}", "gists_url": "https://api.github.com/users/mxschmitt/gists{/gist_id}", "starred_url": "https://api.github.com/users/mxschmitt/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/mxschmitt/subscriptions", "organizations_url": "https://api.github.com/users/mxschmitt/orgs", "repos_url": "https://api.github.com/users/mxschmitt/repos", "events_url": "https://api.github.com/users/mxschmitt/events{/privacy}", "received_events_url": "https://api.github.com/users/mxschmitt/received_events", "type": "User", "site_admin": false }, "labels": [], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 0, "created_at": "2022-12-16T11:15:20Z", "updated_at": "2022-12-16T17:02:26Z", "closed_at": "2022-12-16T17:02:26Z", "author_association": "MEMBER", "active_lock_reason": null, "draft": false, "pull_request": { "url": "https://api.github.com/repos/microsoft/playwright/pulls/19509", "html_url": "https://github.com//pull/19509", "diff_url": "https://github.com//pull/19509.diff", "patch_url": "https://github.com//pull/19509.patch", "merged_at": "2022-12-16T17:02:26Z" }, "body": "Also a CP candidate.", "reactions": { "url": "https://api.github.com/repos//issues/19509/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19509/timeline", "performed_via_github_app": null, "state_reason": null }, { "url": "https://api.github.com/repos//issues/19508", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19508/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19508/comments", "events_url": "https://api.github.com/repos//issues/19508/events", "html_url": "https://github.com//pull/19508", "id": 1500024197, "node_id": "PR_kwDODTssw85FoXwg", "number": 19508, "title": "chery-pick(#19507): docs: fix HTML snippets", "user": { "login": "playwrightmachine", "id": 89237858, "node_id": "MDQ6VXNlcjg5MjM3ODU4", "avatar_url": "https://avatars.githubusercontent.com/u/89237858?v=4", "gravatar_id": "", "url": "https://api.github.com/users/playwrightmachine", "html_url": "https://github.com/playwrightmachine", "followers_url": "https://api.github.com/users/playwrightmachine/followers", "following_url": "https://api.github.com/users/playwrightmachine/following{/other_user}", "gists_url": "https://api.github.com/users/playwrightmachine/gists{/gist_id}", "starred_url": "https://api.github.com/users/playwrightmachine/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/playwrightmachine/subscriptions", "organizations_url": "https://api.github.com/users/playwrightmachine/orgs", "repos_url": "https://api.github.com/users/playwrightmachine/repos", "events_url": "https://api.github.com/users/playwrightmachine/events{/privacy}", "received_events_url": "https://api.github.com/users/playwrightmachine/received_events", "type": "User", "site_admin": false }, "labels": [ { "id": 2992174511, "node_id": "MDU6TGFiZWwyOTkyMTc0NTEx", "url": "https://api.github.com/repos/microsoft/playwright/labels/CQ1", "name": "CQ1", "color": "BA2AAF", "default": false, "description": "" } ], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 0, "created_at": "2022-12-16T11:10:56Z", "updated_at": "2022-12-16T17:19:37Z", "closed_at": "2022-12-16T17:19:36Z", "author_association": "COLLABORATOR", "active_lock_reason": null, "draft": false, "pull_request": { "url": "https://api.github.com/repos/microsoft/playwright/pulls/19508", "html_url": "https://github.com//pull/19508", "diff_url": "https://github.com//pull/19508.diff", "patch_url": "https://github.com//pull/19508.patch", "merged_at": "2022-12-16T17:19:36Z" }, "body": "This PR cherry-picks the following commits:\n\n- ba8a6c4", "reactions": { "url": "https://api.github.com/repos//issues/19508/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19508/timeline", "performed_via_github_app": null, "state_reason": null }, { "url": "https://api.github.com/repos//issues/19507", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19507/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19507/comments", "events_url": "https://api.github.com/repos//issues/19507/events", "html_url": "https://github.com//pull/19507", "id": 1500009654, "node_id": "PR_kwDODTssw85FoUgJ", "number": 19507, "title": "docs: fix HTML snippets", "user": { "login": "mxschmitt", "id": 17984549, "node_id": "MDQ6VXNlcjE3OTg0NTQ5", "avatar_url": "https://avatars.githubusercontent.com/u/17984549?v=4", "gravatar_id": "", "url": "https://api.github.com/users/mxschmitt", "html_url": "https://github.com/mxschmitt", "followers_url": "https://api.github.com/users/mxschmitt/followers", "following_url": "https://api.github.com/users/mxschmitt/following{/other_user}", "gists_url": "https://api.github.com/users/mxschmitt/gists{/gist_id}", "starred_url": "https://api.github.com/users/mxschmitt/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/mxschmitt/subscriptions", "organizations_url": "https://api.github.com/users/mxschmitt/orgs", "repos_url": "https://api.github.com/users/mxschmitt/repos", "events_url": "https://api.github.com/users/mxschmitt/events{/privacy}", "received_events_url": "https://api.github.com/users/mxschmitt/received_events", "type": "User", "site_admin": false }, "labels": [], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 0, "created_at": "2022-12-16T11:01:26Z", "updated_at": "2022-12-16T11:01:33Z", "closed_at": "2022-12-16T11:01:33Z", "author_association": "MEMBER", "active_lock_reason": null, "draft": false, "pull_request": { "url": "https://api.github.com/repos/microsoft/playwright/pulls/19507", "html_url": "https://github.com//pull/19507", "diff_url": "https://github.com//pull/19507.diff", "patch_url": "https://github.com//pull/19507.patch", "merged_at": "2022-12-16T11:01:33Z" }, "body": "Merging unreviewed to unblock docs build.\r\n\r\nMain fix is in line 818, others drive-by.", "reactions": { "url": "https://api.github.com/repos//issues/19507/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19507/timeline", "performed_via_github_app": null, "state_reason": null }, { "url": "https://api.github.com/repos//issues/19504", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19504/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19504/comments", "events_url": "https://api.github.com/repos//issues/19504/events", "html_url": "https://github.com//issues/19504", "id": 1499817355, "node_id": "I_kwDODTssw85ZZWWL", "number": 19504, "title": "[Question]When I log in with global-setup, shouldn't it be auto-login?", "user": { "login": "YusufOzturk-Development", "id": 43332307, "node_id": "MDQ6VXNlcjQzMzMyMzA3", "avatar_url": "https://avatars.githubusercontent.com/u/43332307?v=4", "gravatar_id": "", "url": "https://api.github.com/users/YusufOzturk-Development", "html_url": "https://github.com/YusufOzturk-Development", "followers_url": "https://api.github.com/users/YusufOzturk-Development/followers", "following_url": "https://api.github.com/users/YusufOzturk-Development/following{/other_user}", "gists_url": "https://api.github.com/users/YusufOzturk-Development/gists{/gist_id}", "starred_url": "https://api.github.com/users/YusufOzturk-Development/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/YusufOzturk-Development/subscriptions", "organizations_url": "https://api.github.com/users/YusufOzturk-Development/orgs", "repos_url": "https://api.github.com/users/YusufOzturk-Development/repos", "events_url": "https://api.github.com/users/YusufOzturk-Development/events{/privacy}", "received_events_url": "https://api.github.com/users/YusufOzturk-Development/received_events", "type": "User", "site_admin": false }, "labels": [], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 1, "created_at": "2022-12-16T08:45:30Z", "updated_at": "2022-12-16T18:12:32Z", "closed_at": "2022-12-16T18:12:32Z", "author_association": "NONE", "active_lock_reason": null, "body": "I m handling spec files with my **core.ts** file . My spec file is channels.e2e.spec. When these spec file called from npm script, it navigates to my **channels.e2e.ts**\r\n\r\n I am doing the login process in the global-setup.ts file. When the npm script runs, the login process is works good in global-setup.ts file. Then the browser closes.\r\n\r\nMy question is exactly this: I want to navigate to the first test in my **channels.e2e.ts** file, but a blank browser page opens after **global-setup.ts** file worked good. So it doesn't click the button which is my first action in **NavigateChannelsPage** test. As far as I understand; the login process in the first **global-setup.ts** file works, the browser closes, then the new browser opens, but it cannot find which url to redirect to. Normally, when I log in with global-setup, shouldn't it be auto-login? By the way,After all operations in **global-setup.ts** are running, data is written to storageState.json as follows. But when I look the storageStage.json, cookie is empty as below.Should it be filled?\r\n\r\n```\r\n{\r\n \"cookies\": [],\r\n \"origins\": []\r\n}\r\n```\r\n\r\n**my npm script**\r\n\r\n`\"pw:staging\": \"NAME=test@domain.com PASS=test npx playwright test channels.spec.ts\"`\r\n\r\n\r\n**this is my global-setup.ts** \r\n\r\n```\r\nimport LoginPageRepository from \"./playwright/pages/login\"\r\nimport { chromium, FullConfig } from '@playwright/test';\r\n\r\nasync function globalSetup(config: FullConfig) {\r\n const { baseURL, storageState, headless } = config.projects[0].use;\r\n const browser = await chromium.launch({ headless });\r\n const page = await browser.newPage();\r\n await page.goto(`${baseURL!}/login`)\r\n await page.locator(LoginPageRepository.emailTextField).type(process.env.NAME!)\r\n await page.locator(LoginPageRepository.passwordTextField).type(process.env.PASS!)\r\n await page.locator(LoginPageRepository.loginButton).click()\r\n\t\tawait page.context().storageState({ path: storageState as string });\r\n\t\tawait browser.close();\r\n\t\r\n\t}\r\n\r\n\r\nexport default globalSetup;\r\n```\r\n\r\n\r\n**this is my playwright.config.ts**\r\n```\r\nimport { type PlaywrightTestConfig, devices } from \"@playwright/test\";\r\nconst config: PlaywrightTestConfig = {\r\n globalSetup: require.resolve('./global-setup'),\r\n reporter: [ ['html', { outputFolder: 'report' }] ],\r\n use: {\r\n headless: false,\r\n baseURL: 'https://test/beta',\r\n storageState: 'storageState.json',\r\n ignoreHTTPSErrors: true\r\n },\r\n projects: [\r\n {\r\n name: \"chromium\",\r\n use: {\r\n ...devices[\"Desktop Chrome\"],\r\n launchOptions: {\r\n args: [\"--disable-web-security\"],\r\n },\r\n },\r\n }\r\n ],\r\n};\r\nexport default config;\r\n```\r\n\r\n**this is my channels.spec.ts file**;\r\n\r\n```\r\nimport Core from \"../../../../core\";\r\nimport { Identity } from \"./identity.api\";\r\n\r\nCore.create(\"Identity\", Identity);\r\n```\r\n\r\n\r\n**This is my channels.e2e.ts file** ;\r\n\r\n```\r\nimport { expect } from \"@playwright/test\"\r\nimport ChannelsPageRepository from \"../../pages/channels\"\r\nimport { Login } from \"../login/login.e2e\"\r\nimport { faker } from '@faker-js/faker';\r\nexport const Channels = {\r\n States: {\r\n fakeName:{} as string\r\n },\r\n API: {},\r\n UI: {\r\n NavigateChannelsPage: {\r\n id:1,\r\n notes:\"navigates channels page\",\r\n tag:\"\",\r\n run: async ({ page }) => {\r\n await page.locator(ChannelsPageRepository.channelsButton).click()\r\n await expect(page).toHaveURL(/\/channels/); \r\n \r\n }\r\n },\r\n ViewEmailChannels: {\r\n id:2,\r\n notes:\"click view my email channels button and navigate mail channels page\",\r\n tag:\"\",\r\n run: async ({ page }) => {\r\n await Channels.UI.NavigateChannelsPage.run({page})\r\n await page.locator(ChannelsPageRepository.viewMyEmailChannelButton).click()\r\n await expect(page).toHaveURL(/\/a_channels/)\r\n }\r\n },\r\n }\r\n}\r\n```\r\n\r\n**this my core.ts file (I am managing **all spec files** here using Core.create method)**\r\n\r\n```\r\nimport { test } from \"@playwright/test\";\r\n\r\nconst Core = {\r\n create(name: string, config: any) {\r\n return (() => {\r\n if (config.API) {\r\n test.describe(`${name}`, async () => {\r\n config.beforeAll && test.beforeAll(config.beforeAll);\r\n config.afterAll && test.afterAll(config.afterAll);\r\n config.beforeEach && test.beforeEach(config.beforeEach);\r\n config.afterEach && test.afterEach(config.afterEach);\r\n await Promise.all(\r\n Object.keys(config.API).map((t) => {\r\n let testContent = config.API[t];\r\n let desc = `API- ${t} - #${testContent.id}# - ${testContent.notes}`;\r\n let skip = testContent.skip || config.API.skip;\r\n let only = testContent.only;\r\n if (skip) {\r\n test.skip(desc, async () => {\r\n return testContent.run();\r\n });\r\n }\r\n if (only) {\r\n test.only(desc, async () => {\r\n return testContent.run();\r\n });\r\n }\r\n if (!skip && !only) {\r\n test(desc, async () => {\r\n return testContent.run();\r\n });\r\n }\r\n })\r\n );\r\n });\r\n }\r\n if (config.UI) {\r\n test.describe(`${name}`, async () => {\r\n config.beforeAll && test.beforeAll(config.beforeAll);\r\n config.afterAll && test.afterAll(config.afterAll);\r\n config.beforeEach && test.beforeEach(config.beforeEach);\r\n config.afterEach && test.afterEach(config.afterEach);\r\n await Promise.all(\r\n Object.keys(config.UI).map((c) => {\r\n let testContent = config.UI[c];\r\n let desc = `UI- ${c} - #${testContent.id}# - ${testContent.notes}`;\r\n let skip = testContent.skip || config.UI.skip;\r\n let only = testContent.only;\r\n if (skip) {\r\n test.skip(desc, async () => {\r\n return testContent.run();\r\n });\r\n }\r\n if (only) {\r\n test.only(desc, async () => {\r\n return testContent.run();\r\n });\r\n }\r\n if (!skip && !only) {\r\n test(desc, async ({ page }) => {\r\n return testContent.run({ page });\r\n });\r\n }\r\n })\r\n );\r\n });\r\n }\r\n })();\r\n },\r\n};\r\n\r\nexport default Core;\r\n\r\n```\r\n\r\n", "reactions": { "url": "https://api.github.com/repos//issues/19504/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19504/timeline", "performed_via_github_app": null, "state_reason": "completed" }, { "url": "https://api.github.com/repos//issues/19499", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19499/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19499/comments", "events_url": "https://api.github.com/repos//issues/19499/events", "html_url": "https://github.com//issues/19499", "id": 1499601776, "node_id": "I_kwDODTssw85ZYhtw", "number": 19499, "title": "[BUG] Failed to run browser with chromium.launchPersistentContext", "user": { "login": "sunopar", "id": 13537651, "node_id": "MDQ6VXNlcjEzNTM3NjUx", "avatar_url": "https://avatars.githubusercontent.com/u/13537651?v=4", "gravatar_id": "", "url": "https://api.github.com/users/sunopar", "html_url": "https://github.com/sunopar", "followers_url": "https://api.github.com/users/sunopar/followers", "following_url": "https://api.github.com/users/sunopar/following{/other_user}", "gists_url": "https://api.github.com/users/sunopar/gists{/gist_id}", "starred_url": "https://api.github.com/users/sunopar/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/sunopar/subscriptions", "organizations_url": "https://api.github.com/users/sunopar/orgs", "repos_url": "https://api.github.com/users/sunopar/repos", "events_url": "https://api.github.com/users/sunopar/events{/privacy}", "received_events_url": "https://api.github.com/users/sunopar/received_events", "type": "User", "site_admin": false }, "labels": [], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 3, "created_at": "2022-12-16T05:06:21Z", "updated_at": "2022-12-17T18:28:25Z", "closed_at": "2022-12-17T18:28:25Z", "author_association": "NONE", "active_lock_reason": null, "body": "**Context:**\r\n- Playwright Version: 1.28.1\r\n- Operating System: Apple M1 Pro MacOS\r\n- Node.js version: Node.js v18.10.0\r\n- Browser: Chromium\r\n- Extra: [any specific details about your environment]\r\n\r\n**Code Snippet**\r\n\r\n```javascript\r\nconst { chromium } = require(\"playwright\");\r\n\r\nconst checkPipeline = async () => {\r\n const targetUri = \"https://github.com\";\r\n\r\n // Setup\r\n const userDataDir = \"/Users/user/Library/Application Support/Google/Chrome/\";\r\n const context = await chromium.launchPersistentContext(userDataDir, {\r\n headless: false,\r\n channel: \"chrome\",\r\n executablePath:\r\n \"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome\",\r\n });\r\n const page = await context.newPage(targetUri);\r\n\r\n // The actual interesting bit\r\n await page.goto(targetUri);\r\n\r\n await browser.close();\r\n};\r\n\r\nconst main = async () => {\r\n await checkPipeline();\r\n};\r\nmain();\r\n\r\n```\r\n\r\n**Describe the bug**\r\n\r\nWhen I use `nodejs` to run this code, the browser will open a page about: blank and then it will throw an error in the below.\r\n\r\n```\r\nnode:internal/process/promises:288\r\n triggerUncaughtException(err, true /* fromPromise */);\r\n ^\r\n\r\nbrowserType.launchPersistentContext: Browser closed.\r\n==================== Browser output: ====================\r\n /Applications/Google Chrome.app/Contents/MacOS/Google Chrome --disable-field-trial-config --disable-background-networking --enable-features=NetworkService,NetworkServiceInProcess --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-back-forward-cache --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-component-update --no-default-browser-check --disable-default-apps --disable-dev-shm-usage --disable-extensions --disable-features=ImprovedCookieControls,LazyFrameLoading,GlobalMediaControls,DestroyProfileOnBrowserClose,MediaRouter,DialMediaRouteProvider,AcceptCHFrame,AutoExpandDetailsElement,CertificateTransparencyComponentUpdater,AvoidUnnecessaryBeforeUnloadCheckSync,Translate --allow-pre-commit-input --disable-hang-monitor --disable-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --disable-sync --force-color-profile=srgb --metrics-recording-only --no-first-run --enable-automation --password-store=basic --use-mock-keychain --no-service-autorun --export-tagged-pdf --enable-use-zoom-for-dsf=false --no-sandbox --user-data-dir=/Users/user/Library/Application Support/Google/Chrome/ --remote-debugging-pipe about:blank\r\n pid=55911\r\n[pid=55911][err] objc[55922]: Class WebSwapCGLLayer is implemented in both /System/Library/Frameworks/WebKit.framework/Versions/A/Frameworks/WebCore.framework/Versions/A/Frameworks/libANGLE-shared.dylib (0x23a295b50) and /Applications/Google Chrome.app/Contents/Frameworks/Google Chrome Framework.framework/Versions/108.0.5359.124/Libraries/libGLESv2.dylib (0x10ad0bf38). One of the two will be used. Which one is undefined.\r\n[pid=55911][out] 正在现有的浏览器会话中打开。\r\n=========================== logs ===========================\r\n /Applications/Google Chrome.app/Contents/MacOS/Google Chrome --disable-field-trial-config --disable-background-networking --enable-features=NetworkService,NetworkServiceInProcess --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-back-forward-cache --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-component-update --no-default-browser-check --disable-default-apps --disable-dev-shm-usage --disable-extensions --disable-features=ImprovedCookieControls,LazyFrameLoading,GlobalMediaControls,DestroyProfileOnBrowserClose,MediaRouter,DialMediaRouteProvider,AcceptCHFrame,AutoExpandDetailsElement,CertificateTransparencyComponentUpdater,AvoidUnnecessaryBeforeUnloadCheckSync,Translate --allow-pre-commit-input --disable-hang-monitor --disable-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --disable-sync --force-color-profile=srgb --metrics-recording-only --no-first-run --enable-automation --password-store=basic --use-mock-keychain --no-service-autorun --export-tagged-pdf --enable-use-zoom-for-dsf=false --no-sandbox --user-data-dir=/Users/user/Library/Application Support/Google/Chrome/ --remote-debugging-pipe about:blank\r\n pid=55911\r\n[pid=55911][err] objc[55922]: Class WebSwapCGLLayer is implemented in both /System/Library/Frameworks/WebKit.framework/Versions/A/Frameworks/WebCore.framework/Versions/A/Frameworks/libANGLE-shared.dylib (0x23a295b50) and /Applications/Google Chrome.app/Contents/Frameworks/Google Chrome Framework.framework/Versions/108.0.5359.124/Libraries/libGLESv2.dylib (0x10ad0bf38). One of the two will be used. Which one is undefined.\r\n[pid=55911][out] 正在现有的浏览器会话中打开。\r\n============================================================\r\n at async checkPipeline (/Users/user/code/draft/playwright-test/index.js:8:19)\r\n at async main (/Users/user/code/draft/playwright-test/index.js:23:3) {\r\n name: 'Error'\r\n}\r\n\r\nNode.js v18.10.0\r\n```", "reactions": { "url": "https://api.github.com/repos//issues/19499/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19499/timeline", "performed_via_github_app": null, "state_reason": "completed" }, { "url": "https://api.github.com/repos//issues/19498", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19498/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19498/comments", "events_url": "https://api.github.com/repos//issues/19498/events", "html_url": "https://github.com//issues/19498", "id": 1499395597, "node_id": "I_kwDODTssw85ZXvYN", "number": 19498, "title": "[BUG] undefined: Maximum call stack size exceeded with I18nextProvider", "user": { "login": "zkrzyzanowski", "id": 13263266, "node_id": "MDQ6VXNlcjEzMjYzMjY2", "avatar_url": "https://avatars.githubusercontent.com/u/13263266?v=4", "gravatar_id": "", "url": "https://api.github.com/users/zkrzyzanowski", "html_url": "https://github.com/zkrzyzanowski", "followers_url": "https://api.github.com/users/zkrzyzanowski/followers", "following_url": "https://api.github.com/users/zkrzyzanowski/following{/other_user}", "gists_url": "https://api.github.com/users/zkrzyzanowski/gists{/gist_id}", "starred_url": "https://api.github.com/users/zkrzyzanowski/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/zkrzyzanowski/subscriptions", "organizations_url": "https://api.github.com/users/zkrzyzanowski/orgs", "repos_url": "https://api.github.com/users/zkrzyzanowski/repos", "events_url": "https://api.github.com/users/zkrzyzanowski/events{/privacy}", "received_events_url": "https://api.github.com/users/zkrzyzanowski/received_events", "type": "User", "site_admin": false }, "labels": [], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 1, "created_at": "2022-12-16T01:02:36Z", "updated_at": "2022-12-16T23:02:39Z", "closed_at": "2022-12-16T01:37:02Z", "author_association": "NONE", "active_lock_reason": null, "body": "**Context:**\r\n- Playwright Version: 1.26.1\r\n- Operating System: mac\r\n- Node.js version: 16.17.0\r\n- Browser: chromium\r\n- Extra: \r\n\r\n\r\n\r\n\r\n**Code Snippet**\r\n\r\n\r\n```javascript\r\nimport { test, expect } from '@playwright/experimental-ct-react';\r\nimport SomeComponent from '../../components/some_component';\r\nimport { I18nextProvider } from 'react-i18next';\r\nimport i18n from '../../i18n/i18n';\r\n\r\ntest.use({ viewport: { width: 500, height: 500 } });\r\n\r\ntest('should work', async ({ mount }) => {\r\n const component = await mount(\r\n \r\n \r\n \r\n );\r\n\r\n await expect(component).toContainText('some text here');\r\n});\r\n\r\n```\r\n\r\n**Describe the bug**\r\n\r\nWhen running a component test using `I18nextProvider` from `react-i18next`, I'd expect the provider to be available and translated text to be shown.\r\n\r\n```\r\nplaywright test\r\n```\r\n\r\nexpected:\r\n• passing test\r\n\r\nactual:\r\n```\r\nRunning 1 test using 1 worker\r\n\r\n ✘ 1 [chromium] › tests/components/component.spec.tsx:9:1 › should work (1s)\r\n\r\n\r\n 1) [chromium] › tests/components/component.spec.tsx:9:1 › should work ======\r\n\r\n undefined: Maximum call stack size exceeded\r\n\r\n at ../../node_modules/.pnpm/@playwright+test@1.26.1/node_modules/@playwright/test/lib/mount.js:48\r\n\r\n 46 | }, use) => {\r\n 47 | await use(async (component, options) => {\r\n > 48 | const selector = await page._wrapApiCall(async () => {\r\n | ^\r\n 49 | return await innerMount(page, component, options);\r\n 50 | }, true);\r\n 51 | const locator = page.locator(selector);\r\n\r\n \r\n```\r\n", "reactions": { "url": "https://api.github.com/repos//issues/19498/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19498/timeline", "performed_via_github_app": null, "state_reason": "completed" }, { "url": "https://api.github.com/repos//issues/19497", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19497/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19497/comments", "events_url": "https://api.github.com/repos//issues/19497/events", "html_url": "https://github.com//pull/19497", "id": 1499269704, "node_id": "PR_kwDODTssw85Flz2E", "number": 19497, "title": "chore: release notes 1.29", "user": { "login": "aslushnikov", "id": 746130, "node_id": "MDQ6VXNlcjc0NjEzMA==", "avatar_url": "https://avatars.githubusercontent.com/u/746130?v=4", "gravatar_id": "", "url": "https://api.github.com/users/aslushnikov", "html_url": "https://github.com/aslushnikov", "followers_url": "https://api.github.com/users/aslushnikov/followers", "following_url": "https://api.github.com/users/aslushnikov/following{/other_user}", "gists_url": "https://api.github.com/users/aslushnikov/gists{/gist_id}", "starred_url": "https://api.github.com/users/aslushnikov/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/aslushnikov/subscriptions", "organizations_url": "https://api.github.com/users/aslushnikov/orgs", "repos_url": "https://api.github.com/users/aslushnikov/repos", "events_url": "https://api.github.com/users/aslushnikov/events{/privacy}", "received_events_url": "https://api.github.com/users/aslushnikov/received_events", "type": "User", "site_admin": false }, "labels": [], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 0, "created_at": "2022-12-15T23:35:34Z", "updated_at": "2022-12-16T17:46:42Z", "closed_at": "2022-12-16T17:46:40Z", "author_association": "CONTRIBUTOR", "active_lock_reason": null, "draft": false, "pull_request": { "url": "https://api.github.com/repos/microsoft/playwright/pulls/19497", "html_url": "https://github.com//pull/19497", "diff_url": "https://github.com//pull/19497.diff", "patch_url": "https://github.com//pull/19497.patch", "merged_at": "2022-12-16T17:46:40Z" }, "body": null, "reactions": { "url": "https://api.github.com/repos//issues/19497/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19497/timeline", "performed_via_github_app": null, "state_reason": null }, { "url": "https://api.github.com/repos//issues/19494", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19494/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19494/comments", "events_url": "https://api.github.com/repos//issues/19494/events", "html_url": "https://github.com//issues/19494", "id": 1499085096, "node_id": "I_kwDODTssw85ZWjko", "number": 19494, "title": "[Question] Playwright with java vs with c#", "user": { "login": "fredericL-sigma", "id": 117863897, "node_id": "U_kgDOBwZ12Q", "avatar_url": "https://avatars.githubusercontent.com/u/117863897?v=4", "gravatar_id": "", "url": "https://api.github.com/users/fredericL-sigma", "html_url": "https://github.com/fredericL-sigma", "followers_url": "https://api.github.com/users/fredericL-sigma/followers", "following_url": "https://api.github.com/users/fredericL-sigma/following{/other_user}", "gists_url": "https://api.github.com/users/fredericL-sigma/gists{/gist_id}", "starred_url": "https://api.github.com/users/fredericL-sigma/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/fredericL-sigma/subscriptions", "organizations_url": "https://api.github.com/users/fredericL-sigma/orgs", "repos_url": "https://api.github.com/users/fredericL-sigma/repos", "events_url": "https://api.github.com/users/fredericL-sigma/events{/privacy}", "received_events_url": "https://api.github.com/users/fredericL-sigma/received_events", "type": "User", "site_admin": false }, "labels": [], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 1, "created_at": "2022-12-15T21:05:52Z", "updated_at": "2022-12-15T22:09:59Z", "closed_at": "2022-12-15T22:09:32Z", "author_association": "NONE", "active_lock_reason": null, "body": "I need to follow some course with Playwright, as our company is using c# .net, I want to know if I follow a Playwright course with java, will the transition to c# be difficult.\r\n\r\nThank you", "reactions": { "url": "https://api.github.com/repos//issues/19494/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19494/timeline", "performed_via_github_app": null, "state_reason": "completed" }, { "url": "https://api.github.com/repos//issues/19491", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19491/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19491/comments", "events_url": "https://api.github.com/repos//issues/19491/events", "html_url": "https://github.com//pull/19491", "id": 1498966033, "node_id": "PR_kwDODTssw85FkwmC", "number": 19491, "title": "chore: mark 1.29.0", "user": { "login": "aslushnikov", "id": 746130, "node_id": "MDQ6VXNlcjc0NjEzMA==", "avatar_url": "https://avatars.githubusercontent.com/u/746130?v=4", "gravatar_id": "", "url": "https://api.github.com/users/aslushnikov", "html_url": "https://github.com/aslushnikov", "followers_url": "https://api.github.com/users/aslushnikov/followers", "following_url": "https://api.github.com/users/aslushnikov/following{/other_user}", "gists_url": "https://api.github.com/users/aslushnikov/gists{/gist_id}", "starred_url": "https://api.github.com/users/aslushnikov/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/aslushnikov/subscriptions", "organizations_url": "https://api.github.com/users/aslushnikov/orgs", "repos_url": "https://api.github.com/users/aslushnikov/repos", "events_url": "https://api.github.com/users/aslushnikov/events{/privacy}", "received_events_url": "https://api.github.com/users/aslushnikov/received_events", "type": "User", "site_admin": false }, "labels": [], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 0, "created_at": "2022-12-15T19:24:24Z", "updated_at": "2022-12-16T17:49:57Z", "closed_at": "2022-12-16T17:49:56Z", "author_association": "CONTRIBUTOR", "active_lock_reason": null, "draft": false, "pull_request": { "url": "https://api.github.com/repos/microsoft/playwright/pulls/19491", "html_url": "https://github.com//pull/19491", "diff_url": "https://github.com//pull/19491.diff", "patch_url": "https://github.com//pull/19491.patch", "merged_at": "2022-12-16T17:49:56Z" }, "body": null, "reactions": { "url": "https://api.github.com/repos//issues/19491/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19491/timeline", "performed_via_github_app": null, "state_reason": null }, { "url": "https://api.github.com/repos//issues/19490", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19490/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19490/comments", "events_url": "https://api.github.com/repos//issues/19490/events", "html_url": "https://github.com//pull/19490", "id": 1498946224, "node_id": "PR_kwDODTssw85FksRL", "number": 19490, "title": "chore: simplify post_data processing", "user": { "login": "pavelfeldman", "id": 883973, "node_id": "MDQ6VXNlcjg4Mzk3Mw==", "avatar_url": "https://avatars.githubusercontent.com/u/883973?v=4", "gravatar_id": "", "url": "https://api.github.com/users/pavelfeldman", "html_url": "https://github.com/pavelfeldman", "followers_url": "https://api.github.com/users/pavelfeldman/followers", "following_url": "https://api.github.com/users/pavelfeldman/following{/other_user}", "gists_url": "https://api.github.com/users/pavelfeldman/gists{/gist_id}", "starred_url": "https://api.github.com/users/pavelfeldman/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/pavelfeldman/subscriptions", "organizations_url": "https://api.github.com/users/pavelfeldman/orgs", "repos_url": "https://api.github.com/users/pavelfeldman/repos", "events_url": "https://api.github.com/users/pavelfeldman/events{/privacy}", "received_events_url": "https://api.github.com/users/pavelfeldman/received_events", "type": "User", "site_admin": false }, "labels": [], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 0, "created_at": "2022-12-15T19:08:46Z", "updated_at": "2022-12-15T19:57:52Z", "closed_at": "2022-12-15T19:57:51Z", "author_association": "MEMBER", "active_lock_reason": null, "draft": false, "pull_request": { "url": "https://api.github.com/repos/microsoft/playwright/pulls/19490", "html_url": "https://github.com//pull/19490", "diff_url": "https://github.com//pull/19490.diff", "patch_url": "https://github.com//pull/19490.patch", "merged_at": "2022-12-15T19:57:51Z" }, "body": null, "reactions": { "url": "https://api.github.com/repos//issues/19490/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19490/timeline", "performed_via_github_app": null, "state_reason": null }, { "url": "https://api.github.com/repos//issues/19489", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19489/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19489/comments", "events_url": "https://api.github.com/repos//issues/19489/events", "html_url": "https://github.com//pull/19489", "id": 1498920799, "node_id": "PR_kwDODTssw85Fkmyl", "number": 19489, "title": "chore: cut version 1.29", "user": { "login": "aslushnikov", "id": 746130, "node_id": "MDQ6VXNlcjc0NjEzMA==", "avatar_url": "https://avatars.githubusercontent.com/u/746130?v=4", "gravatar_id": "", "url": "https://api.github.com/users/aslushnikov", "html_url": "https://github.com/aslushnikov", "followers_url": "https://api.github.com/users/aslushnikov/followers", "following_url": "https://api.github.com/users/aslushnikov/following{/other_user}", "gists_url": "https://api.github.com/users/aslushnikov/gists{/gist_id}", "starred_url": "https://api.github.com/users/aslushnikov/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/aslushnikov/subscriptions", "organizations_url": "https://api.github.com/users/aslushnikov/orgs", "repos_url": "https://api.github.com/users/aslushnikov/repos", "events_url": "https://api.github.com/users/aslushnikov/events{/privacy}", "received_events_url": "https://api.github.com/users/aslushnikov/received_events", "type": "User", "site_admin": false }, "labels": [], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 0, "created_at": "2022-12-15T18:47:12Z", "updated_at": "2022-12-15T19:22:37Z", "closed_at": "2022-12-15T19:22:35Z", "author_association": "CONTRIBUTOR", "active_lock_reason": null, "draft": false, "pull_request": { "url": "https://api.github.com/repos/microsoft/playwright/pulls/19489", "html_url": "https://github.com//pull/19489", "diff_url": "https://github.com//pull/19489.diff", "patch_url": "https://github.com//pull/19489.patch", "merged_at": "2022-12-15T19:22:35Z" }, "body": null, "reactions": { "url": "https://api.github.com/repos//issues/19489/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19489/timeline", "performed_via_github_app": null, "state_reason": null }, { "url": "https://api.github.com/repos//issues/19488", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19488/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19488/comments", "events_url": "https://api.github.com/repos//issues/19488/events", "html_url": "https://github.com//issues/19488", "id": 1498881626, "node_id": "I_kwDODTssw85ZVx5a", "number": 19488, "title": "[Question] How to login to the application only once during all tests?", "user": { "login": "YusufOzturk-Development", "id": 43332307, "node_id": "MDQ6VXNlcjQzMzMyMzA3", "avatar_url": "https://avatars.githubusercontent.com/u/43332307?v=4", "gravatar_id": "", "url": "https://api.github.com/users/YusufOzturk-Development", "html_url": "https://github.com/YusufOzturk-Development", "followers_url": "https://api.github.com/users/YusufOzturk-Development/followers", "following_url": "https://api.github.com/users/YusufOzturk-Development/following{/other_user}", "gists_url": "https://api.github.com/users/YusufOzturk-Development/gists{/gist_id}", "starred_url": "https://api.github.com/users/YusufOzturk-Development/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/YusufOzturk-Development/subscriptions", "organizations_url": "https://api.github.com/users/YusufOzturk-Development/orgs", "repos_url": "https://api.github.com/users/YusufOzturk-Development/repos", "events_url": "https://api.github.com/users/YusufOzturk-Development/events{/privacy}", "received_events_url": "https://api.github.com/users/YusufOzturk-Development/received_events", "type": "User", "site_admin": false }, "labels": [ { "id": 2518858583, "node_id": "MDU6TGFiZWwyNTE4ODU4NTgz", "url": "https://api.github.com/repos/microsoft/playwright/labels/triaging", "name": "triaging", "color": "666666", "default": false, "description": "" } ], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 2, "created_at": "2022-12-15T18:13:01Z", "updated_at": "2022-12-16T08:20:08Z", "closed_at": "2022-12-16T08:20:07Z", "author_association": "NONE", "active_lock_reason": null, "body": "\r\n**First question**; How can I use process.env in global-setup.ts? You can check below code;\r\n` await page.locator(LoginPageRepository.emailTextField).type(process.env.NAME)`\r\n\r\nwhen try above code in global-setup.ts,giving below warning(tried this method in different file it worked , did not give any warning,but in global-setup.ts I took below warning);\r\n`Argument of type 'string | undefined' is not assignable to parameter of type 'string'`\r\n\r\n**Second question**; I want to login to the application only once during all tests. When I try below code, browser opens but there is no action, don't navigate the url. Are there any configuration error in my code?\r\n\r\n**my npm script**\r\n\r\n`\"pw:staging\": \"NAME=test@domain.com PASS=test npx playwright test \"`\r\n\r\n**this is my global-setup.ts** \r\n\r\n```\r\nimport { chromium, FullConfig } from '@playwright/test';\r\nimport LoginPageRepository from \"./playwright/pages/login\"\r\n\r\nconst fs = require(\"fs\");\r\nconst environment = JSON.parse(fs.readFileSync(process.env.ENV, \"utf8\"));\r\nconst { baseURL } = { baseURL: environment.env.baseURL }\r\n\r\nasync function globalSetup(config: FullConfig) {\r\n const browser = await chromium.launch();\r\n const page = await browser.newPage();\r\n await page.goto('https://test/login')\r\n await page.locator(LoginPageRepository.emailTextField).type(\"test@domain.com\")\r\n await page.locator(LoginPageRepository.passwordTextField).type(\"test\")\r\n await page.locator(LoginPageRepository.loginButton).click()\r\n await page.context().storageState({ path: 'storageState.json' });\r\n await browser.close();\r\n}\r\n\r\nexport default globalSetup;\r\n```\r\n\r\n\r\n**this is my playwright.config.ts**\r\n```\r\n\r\nimport { type PlaywrightTestConfig, devices } from \"@playwright/test\";\r\nconst config: PlaywrightTestConfig = {\r\n globalSetup: require.resolve('./global-setup'),\r\n reporter: [ ['html', { outputFolder: 'report' }] ],\r\n use: {\r\n headless: false,\r\n storageState: 'storageState.json'\r\n },\r\n projects: [\r\n {\r\n name: \"chromium\",\r\n use: {\r\n ...devices[\"Desktop Chrome\"],\r\n launchOptions: {\r\n args: [\"--disable-web-security\"],\r\n },\r\n },\r\n }\r\n ],\r\n};\r\nexport default config;\r\n```\r\n", "reactions": { "url": "https://api.github.com/repos//issues/19488/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19488/timeline", "performed_via_github_app": null, "state_reason": "completed" }, { "url": "https://api.github.com/repos//issues/19486", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19486/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19486/comments", "events_url": "https://api.github.com/repos//issues/19486/events", "html_url": "https://github.com//issues/19486", "id": 1498821705, "node_id": "I_kwDODTssw85ZVjRJ", "number": 19486, "title": "[Question]How to upload csv file ? ", "user": { "login": "YusufOzturk-Development", "id": 43332307, "node_id": "MDQ6VXNlcjQzMzMyMzA3", "avatar_url": "https://avatars.githubusercontent.com/u/43332307?v=4", "gravatar_id": "", "url": "https://api.github.com/users/YusufOzturk-Development", "html_url": "https://github.com/YusufOzturk-Development", "followers_url": "https://api.github.com/users/YusufOzturk-Development/followers", "following_url": "https://api.github.com/users/YusufOzturk-Development/following{/other_user}", "gists_url": "https://api.github.com/users/YusufOzturk-Development/gists{/gist_id}", "starred_url": "https://api.github.com/users/YusufOzturk-Development/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/YusufOzturk-Development/subscriptions", "organizations_url": "https://api.github.com/users/YusufOzturk-Development/orgs", "repos_url": "https://api.github.com/users/YusufOzturk-Development/repos", "events_url": "https://api.github.com/users/YusufOzturk-Development/events{/privacy}", "received_events_url": "https://api.github.com/users/YusufOzturk-Development/received_events", "type": "User", "site_admin": false }, "labels": [], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 1, "created_at": "2022-12-15T17:27:15Z", "updated_at": "2022-12-16T00:08:59Z", "closed_at": "2022-12-16T00:08:59Z", "author_association": "NONE", "active_lock_reason": null, "body": "->fixtures(folder)\r\n -share.csv(file)\r\n->playwrgiht(folder)\r\n -test(folder)\r\n --channels.config.ts(file)\r\n --login.config.ts(file)\r\n\r\n\r\nYou can see my folder structure above. I have a share.csv file in fixtures folder and want to upload share.csv file in my channels.config.ts (By clicking Upload file button). You can see the web directory of the Upload File button below\r\n\r\n`Upload File`\r\n \r\n\r\n\r\nIn my channels.config.ts I tried below code but got error.\r\n` await page.getByText('Upload File').setInputFiles('../../fixtures/share.csv');` \r\n\r\n\r\nAlso tried using xpath instead of using getByText text but took same error again. You can see error below;\r\n\r\n`Error: ENOENT: no such file or directory, stat '../../fixtures/share.csv'`\r\n\r\nHow can upload share.csv file according to above DOM structure and my folder structere? Tried many different codes but got error again. What is my fault?\r\n\r\n", "reactions": { "url": "https://api.github.com/repos//issues/19486/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19486/timeline", "performed_via_github_app": null, "state_reason": "completed" }, { "url": "https://api.github.com/repos//issues/19485", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19485/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19485/comments", "events_url": "https://api.github.com/repos//issues/19485/events", "html_url": "https://github.com//pull/19485", "id": 1498807369, "node_id": "PR_kwDODTssw85FkOBz", "number": 19485, "title": "feat(console api): first/last/nth", "user": { "login": "dgozman", "id": 9881434, "node_id": "MDQ6VXNlcjk4ODE0MzQ=", "avatar_url": "https://avatars.githubusercontent.com/u/9881434?v=4", "gravatar_id": "", "url": "https://api.github.com/users/dgozman", "html_url": "https://github.com/dgozman", "followers_url": "https://api.github.com/users/dgozman/followers", "following_url": "https://api.github.com/users/dgozman/following{/other_user}", "gists_url": "https://api.github.com/users/dgozman/gists{/gist_id}", "starred_url": "https://api.github.com/users/dgozman/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/dgozman/subscriptions", "organizations_url": "https://api.github.com/users/dgozman/orgs", "repos_url": "https://api.github.com/users/dgozman/repos", "events_url": "https://api.github.com/users/dgozman/events{/privacy}", "received_events_url": "https://api.github.com/users/dgozman/received_events", "type": "User", "site_admin": false }, "labels": [], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 0, "created_at": "2022-12-15T17:15:40Z", "updated_at": "2022-12-15T19:18:00Z", "closed_at": "2022-12-15T19:18:00Z", "author_association": "CONTRIBUTOR", "active_lock_reason": null, "draft": false, "pull_request": { "url": "https://api.github.com/repos/microsoft/playwright/pulls/19485", "html_url": "https://github.com//pull/19485", "diff_url": "https://github.com//pull/19485.diff", "patch_url": "https://github.com//pull/19485.patch", "merged_at": "2022-12-15T19:18:00Z" }, "body": null, "reactions": { "url": "https://api.github.com/repos//issues/19485/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19485/timeline", "performed_via_github_app": null, "state_reason": null }, { "url": "https://api.github.com/repos//issues/19484", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19484/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19484/comments", "events_url": "https://api.github.com/repos//issues/19484/events", "html_url": "https://github.com//pull/19484", "id": 1498764993, "node_id": "PR_kwDODTssw85FkE2A", "number": 19484, "title": "chore: withdraw locator.enumerate", "user": { "login": "pavelfeldman", "id": 883973, "node_id": "MDQ6VXNlcjg4Mzk3Mw==", "avatar_url": "https://avatars.githubusercontent.com/u/883973?v=4", "gravatar_id": "", "url": "https://api.github.com/users/pavelfeldman", "html_url": "https://github.com/pavelfeldman", "followers_url": "https://api.github.com/users/pavelfeldman/followers", "following_url": "https://api.github.com/users/pavelfeldman/following{/other_user}", "gists_url": "https://api.github.com/users/pavelfeldman/gists{/gist_id}", "starred_url": "https://api.github.com/users/pavelfeldman/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/pavelfeldman/subscriptions", "organizations_url": "https://api.github.com/users/pavelfeldman/orgs", "repos_url": "https://api.github.com/users/pavelfeldman/repos", "events_url": "https://api.github.com/users/pavelfeldman/events{/privacy}", "received_events_url": "https://api.github.com/users/pavelfeldman/received_events", "type": "User", "site_admin": false }, "labels": [], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 0, "created_at": "2022-12-15T16:46:25Z", "updated_at": "2022-12-15T18:13:57Z", "closed_at": "2022-12-15T18:13:57Z", "author_association": "MEMBER", "active_lock_reason": null, "draft": false, "pull_request": { "url": "https://api.github.com/repos/microsoft/playwright/pulls/19484", "html_url": "https://github.com//pull/19484", "diff_url": "https://github.com//pull/19484.diff", "patch_url": "https://github.com//pull/19484.patch", "merged_at": "2022-12-15T18:13:57Z" }, "body": null, "reactions": { "url": "https://api.github.com/repos//issues/19484/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19484/timeline", "performed_via_github_app": null, "state_reason": null }, { "url": "https://api.github.com/repos//issues/19483", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19483/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19483/comments", "events_url": "https://api.github.com/repos//issues/19483/events", "html_url": "https://github.com//issues/19483", "id": 1498761385, "node_id": "I_kwDODTssw85ZVUip", "number": 19483, "title": "How to upload file?", "user": { "login": "YusufOzturk-Development", "id": 43332307, "node_id": "MDQ6VXNlcjQzMzMyMzA3", "avatar_url": "https://avatars.githubusercontent.com/u/43332307?v=4", "gravatar_id": "", "url": "https://api.github.com/users/YusufOzturk-Development", "html_url": "https://github.com/YusufOzturk-Development", "followers_url": "https://api.github.com/users/YusufOzturk-Development/followers", "following_url": "https://api.github.com/users/YusufOzturk-Development/following{/other_user}", "gists_url": "https://api.github.com/users/YusufOzturk-Development/gists{/gist_id}", "starred_url": "https://api.github.com/users/YusufOzturk-Development/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/YusufOzturk-Development/subscriptions", "organizations_url": "https://api.github.com/users/YusufOzturk-Development/orgs", "repos_url": "https://api.github.com/users/YusufOzturk-Development/repos", "events_url": "https://api.github.com/users/YusufOzturk-Development/events{/privacy}", "received_events_url": "https://api.github.com/users/YusufOzturk-Development/received_events", "type": "User", "site_admin": false }, "labels": [], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 1, "created_at": "2022-12-15T16:43:42Z", "updated_at": "2022-12-15T17:28:02Z", "closed_at": "2022-12-15T17:27:44Z", "author_association": "NONE", "active_lock_reason": null, "body": "->fixtures(folder)\r\n -share.csv(file)\r\n->playwrgiht(folder)\r\n -test(folder)\r\n --channels.config.ts(file)\r\n --login.config.ts(file)\r\n\r\n\r\nYou can see my folder structure above. I have a share.csv file in fixtures folder and want to upload share.csv file in my channels.config.ts (By clicking Upload file button). You can see the web directory of the Upload File button below\r\n\r\n`Upload File`\r\n \r\n\r\n\r\nIn my channels.config.ts I tried below code but got error.\r\n` await page.getByText('Upload File').setInputFiles('../../fixtures/share.csv');` \r\n\r\n\r\nAlso tried using xpath instead of using getByText text but took error again. You can see error below;\r\n\r\n```\r\nframe.setInputFiles: Error: Node is not an HTMLInputElement\r\n=========================== logs ===========================\r\nwaiting for selector \"//span[contains(text(),'Upload CSV file')]\"\r\n selector resolved to visible Upload CSV file\r\n============================================================\r\n\r\n at playwright/tests/channels/channels.e2e.ts:87\r\n\r\n 85 | \r\n 86 | await page.locator(ChannelsPageRepository.shareButton).click()\r\n> 87 | await page.locator(ChannelsPageRepository.uploadFileButton).setInputFiles('/Users/test/Desktop/test/fixtures/share.csv');\r\n | ^\r\n```\r\n", "reactions": { "url": "https://api.github.com/repos//issues/19483/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19483/timeline", "performed_via_github_app": null, "state_reason": "completed" }, { "url": "https://api.github.com/repos//issues/19481", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19481/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19481/comments", "events_url": "https://api.github.com/repos//issues/19481/events", "html_url": "https://github.com//issues/19481", "id": 1498563066, "node_id": "I_kwDODTssw85ZUkH6", "number": 19481, "title": "[BUG] Throws error as net::ERR_NAME_NOT_RESOLVED at on executing test on saucelab using sauce connect", "user": { "login": "NerdishShah", "id": 31189986, "node_id": "MDQ6VXNlcjMxMTg5OTg2", "avatar_url": "https://avatars.githubusercontent.com/u/31189986?v=4", "gravatar_id": "", "url": "https://api.github.com/users/NerdishShah", "html_url": "https://github.com/NerdishShah", "followers_url": "https://api.github.com/users/NerdishShah/followers", "following_url": "https://api.github.com/users/NerdishShah/following{/other_user}", "gists_url": "https://api.github.com/users/NerdishShah/gists{/gist_id}", "starred_url": "https://api.github.com/users/NerdishShah/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/NerdishShah/subscriptions", "organizations_url": "https://api.github.com/users/NerdishShah/orgs", "repos_url": "https://api.github.com/users/NerdishShah/repos", "events_url": "https://api.github.com/users/NerdishShah/events{/privacy}", "received_events_url": "https://api.github.com/users/NerdishShah/received_events", "type": "User", "site_admin": false }, "labels": [], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 1, "created_at": "2022-12-15T14:42:38Z", "updated_at": "2022-12-15T18:54:43Z", "closed_at": "2022-12-15T18:54:43Z", "author_association": "NONE", "active_lock_reason": null, "body": "**Context:**\r\n- Playwright Version: 1.28.0\r\n- Operating System: Windows 10 \r\n- Node.js version: 16.15.1\r\n- Browser: All\r\n- Extra: AUT is behind Corp firewall, Execution in cloud based selenium grid on https://saucelabs.com/\r\n\r\n\r\n**DashboardPage.js**\r\n\r\n```\r\nexport class DashboardPage {\r\n /**\r\n * @param {import('@playwright/test').Page} page\r\n */\r\n constructor(page) {\r\n this.page = page;\r\n this.menu = page.locator(\"button\");\r\n }\r\n\r\n async goto() {\r\n await this.page.goto(\"https://internal-application-under-test.com/dashboard\");\r\n }\r\n\r\n async gotoSearchProduct() {\r\n await this.menu.click();\r\n await this.page.locator('div[role=\"button\"]:has-text(\"Product\")').click();\r\n }\r\n}\r\n```\r\n\r\n\r\n**Jenkinsfile**\r\n\r\n```\r\nstage('Selenium Tests') {\r\n container('oraclelinux') {\r\n sauce('saucelab') {\r\n sauceconnect(useGeneratedTunnelIdentifier: true, verboseLogging: true) {\r\n try {\r\n echo 'Run Sauce Playwright Pipeline Test'\r\n sh 'npm install saucectl'\r\n sh 'npx saucectl run'\r\n } catch (Exception err) {\r\n unstable(message: \"Tests are unstable\")\r\n }\r\n }\r\n }\r\n }\r\n }\r\n```\r\n**Jenkins Console Log**\r\n\r\n```\r\n\r\n[Pipeline] stage\r\n[Pipeline] { (Selenium Tests)\r\n[Pipeline] container\r\n[Pipeline] {\r\n[Pipeline] sauce\r\n[Pipeline] {\r\n[Pipeline] sauceconnect\r\n17:14:01 Starting sauce connect\r\n17:14:04 Sauce Connect Proxy™ opens a secure connection between Sauce Labs and a locally hosted application.\r\n17:14:04 \r\n17:14:04 Find more information at: https://docs.saucelabs.com/dev/cli/sauce-connect-proxy\r\n17:14:04 \r\n17:14:04 Sauce Connect 4.8.1, build 2379 41872ee1 \r\n17:14:04 \r\n17:14:04 WARNING: Outdated version 4.8.1. Please download the latest version from https://saucelabs.com/downloads/sc-4.8.2-linux.tar.gz\r\n17:14:04 \r\n17:14:04 Sauce Connect runtime information:\r\n17:14:04 - Name: feature_2Fpipeline-integration-16-1671110041969\r\n17:14:04 - PID: 219\r\n17:14:04 - PID file: /tmp/sc_client-feature_2Fpipeline-integration-16-1671110041969.pid\r\n17:14:04 - Log file: /tmp/sc-feature_2Fpipeline-integration-16-1671110041969.log\r\n17:14:04 - SCProxy Port: 38587\r\n17:14:04 - Status Port: None\r\n17:14:04 - Selenium listener: 34325\r\n17:14:04 - External proxy: None\r\n17:14:04 - Tunnel proxy: None\r\n17:14:04 - Region: eu-central\r\n17:14:04 \r\n17:14:04 Please wait for 'you may start your tests' to start your tests\r\n17:14:14 Secure remote tunnel provisioned. Tunnel ID: 363445c39b5a410ba66bbfeeed129991\r\n[Pipeline] { (Sauce Connect)\r\n[Pipeline] echo\r\n17:14:16 Run Sauce Playwright Pipeline Test\r\n[Pipeline] sh\r\n17:14:17 + npm install saucectl\r\n17:14:16 \r\n17:14:16 Sauce Connect is up, you may start your tests.\r\n17:14:16 Sauce Connect 4.8.1 now launched for: feature_2Fpipeline-integration-16-1671110041969\r\n17:14:16 Incremented process count for feature_2Fpipeline-integration-16-1671110041969, now 1\r\n17:14:35 \r\n17:14:35 added 147 packages, and audited 157 packages in 18s\r\n17:14:35 \r\n17:14:35 6 packages are looking for funding\r\n17:14:35 run `npm fund` for details\r\n17:14:35 \r\n17:14:35 8 vulnerabilities (3 moderate, 5 high)\r\n17:14:35 \r\n17:14:35 Some issues need review, and may require choosing\r\n17:14:35 a different dependency.\r\n17:14:35 \r\n17:14:35 Run `npm audit` for details.\r\n[Pipeline] sh\r\n17:14:36 + npx saucectl run\r\n17:14:36 Running version 0.116.0\r\n17:14:37 13:14:37 INF Running Playwright in Sauce Labs\r\n17:14:37 \r\n17:14:37 (. \r\n17:14:37 #. \r\n17:14:37 #. \r\n17:14:37 .#################### \r\n17:14:37 #####////////*******/###### \r\n17:14:37 .##///////*****************###/ \r\n17:14:37 ,###////*********************### \r\n17:14:37 ####//***********************#### \r\n17:14:37 ###/************************### \r\n17:14:37 ######********************###. ## \r\n17:14:37 (######################## ## ## \r\n17:14:37 ,######(#* ##* (## \r\n17:14:37 /############* ##### \r\n17:14:37 (########( #########( ### \r\n17:14:37 .#######, */ ############ \r\n17:14:37 ,########## %#### , ########* \r\n17:14:37 *### .#######/ ## / ######## \r\n17:14:37 ### .###########//########### \r\n17:14:37 ###### ######################## \r\n17:14:37 (#( *#( #######. (####### \r\n17:14:37 ##, /######## ######## \r\n17:14:37 *######## ######## \r\n17:14:37 \r\n17:14:37 _____ _ _ _____ ______ _____ _ ____ _ _ _____ \r\n17:14:37 / ____| /\\ | | | |/ ____| ____| / ____| | / __ \\| | | | __ \\ \r\n17:14:37 | (___ / \\ | | | | | | |__ | | | | | | | | | | | | | |\r\n17:14:37 \\___ \\ / /\\ \\| | | | | | __| | | | | | | | | | | | | | |\r\n17:14:37 ____) / ____ \\ |__| | |____| |____ | |____| |___| |__| | |__| | |__| |\r\n17:14:37 |_____/_/ \\_\\____/ \\_____|______| \\_____|______\\____/ \\____/|_____/\r\n17:14:37 \r\n17:14:37 13:14:37 INF Archive created. durationMs=4 fileCount=13 size=39593\r\n17:14:37 13:14:37 INF Checking if /tmp/saucectl-app-payload-944279166/config.zip has already been uploaded previously\r\n17:14:37 13:14:37 INF Checksum: a65f87cb1c2d3295577bf37b0fa6371e873fa0596be06084d9a30d0c32ffa126\r\n17:14:38 \r\n⠋ Uploading runner config /tmp/saucectl-app-payload-944279166/config.zip \b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b�������������������������������������������������������������������������\r\n13:14:38 INF Runner Config uploaded. durationMs=350 storageId=3281cc4d-b4cc-49f8-8075-e61564251cf1\r\n17:14:38 13:14:38 INF Checking if /tmp/saucectl-app-payload-944279166/app.zip has already been uploaded previously\r\n17:14:38 13:14:38 INF Checksum: 9753da66f072d4fd746dff09aa494f83fa93d07bb9703ff0937e61d50fcbd759\r\n17:14:40 \r\n⠙ Uploading project /tmp/saucectl-app-payload-944279166/app.zip \b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b����������������������������������������������������������������\r\n13:14:39 INF Project uploaded. durationMs=916 storageId=d5f4921f-7cb1-4140-a17e-5a01288760d1\r\n17:14:40 13:14:39 INF Launching workers. concurrency=10\r\n17:14:40 13:14:39 INF Starting suite. region=eu-central-1 suite=\"Chromium Win\"\r\n17:14:43 13:14:43 INF Suite started. browser=chromium platform=\"Windows 11\" suite=\"Chromium Win\" url=https://app.eu-central-1.saucelabs.com/tests/xxxxxxxxxxxxxxxxxxxxxxxx\r\n17:14:50 13:14:49 INF Suites in progress: 1\r\n17:14:59 13:14:59 INF Suites in progress: 1\r\n17:15:09 13:15:09 INF Suites in progress: 1\r\n17:15:14 13:15:13 ERR Suite finished. passed=false suite=\"Chromium Win\" url=https://app.eu-central-1.saucelabs.com/tests/xxxxxxxxxxxxxxxxxxxxxxxx\r\n17:15:14 13:15:13 INF console.log output: \r\n17:15:14 Preparing npm environment\r\n17:15:14 \r\n17:15:14 Running 3 tests using 1 worker\r\n17:15:14 \r\n17:15:14 x 1 [chromium] › tests\\saucelabIntegration.spec.js:16:1 › Checkout single product - deliver same day (616ms)\r\n17:15:14 x 2 [chromium] › tests\\saucelabIntegration.spec.js:26:1 › Checkout multiple product - deliver next day (536ms)\r\n17:15:14 x 3 [chromium] › tests\\saucelabIntegration.spec.js:36:1 › Checkout multiple product - deliver late (458ms)\r\n17:15:14 \r\n17:15:14 \r\n17:15:14 1) [chromium] › tests\\saucelabIntegration.spec.js:16:1 › Checkout single product - deliver same day\r\n17:15:14 \r\n17:15:14 page.goto: net::ERR_NAME_NOT_RESOLVED at https://internal-application-under-test.com/dashboard\r\n17:15:14 =========================== logs ===========================\r\n17:15:14 navigating to \"https://application-under-test.com/dashboard\", waiting until \"load\"\r\n17:15:14 ============================================================\r\n17:15:14 \r\n17:15:14 8 | test.beforeEach(async ({ page }) => {\r\n17:15:14 9 | const dashboardPage = new DashboardPage(page);\r\n17:15:14 > 10 | await dashboardPage.goto();\r\n17:15:14 | ^\r\n17:15:14 11 | await dashboardPage.gotoSearchProduct();\r\n17:15:14 12 | productSearchPage = new ProductSearchPage(page);\r\n17:15:14 13 | productEditPage = new ProductEditPage(page);\r\n17:15:14 \r\n17:15:14 at DashboardPage.goto (D:\\sauce-playwright-runner\\2.12.0\\bundle\\__project__\\tests\\pages\\dashboardPage.js:11:21)\r\n17:15:14 at D:\\sauce-playwright-runner\\2.12.0\\bundle\\__project__\\tests\\scheduleEdit.spec.js:10:23\r\n\r\n```\r\n\r\n**Describe the bug**\r\n\r\nThe application under test is behind corp firewall due to which its being connected via sauce connect proxy. \r\n\r\nOn sauce lab dashboard, tunnel proxy is getting started but on sauce lab machine the browser just opens and closes immediately. \r\n\r\nConsole error prints as net::ERR_NAME_NOT_RESOLVED\r\n\r\nWhen the application is manually launched using Website Test menu from saucelab by selecting the jenkins started tunnel, it launched successfully.\r\n\r\n![image](https://user-images.githubusercontent.com/31189986/207889657-c8653e1f-e253-4c8a-bdcd-75142702f997.png)\r\n", "reactions": { "url": "https://api.github.com/repos//issues/19481/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19481/timeline", "performed_via_github_app": null, "state_reason": "completed" }, { "url": "https://api.github.com/repos//issues/19479", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19479/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19479/comments", "events_url": "https://api.github.com/repos//issues/19479/events", "html_url": "https://github.com//pull/19479", "id": 1498535149, "node_id": "PR_kwDODTssw85FjTAh", "number": 19479, "title": "feat(chromium-tip-of-tree): roll to r1069", "user": { "login": "playwrightmachine", "id": 89237858, "node_id": "MDQ6VXNlcjg5MjM3ODU4", "avatar_url": "https://avatars.githubusercontent.com/u/89237858?v=4", "gravatar_id": "", "url": "https://api.github.com/users/playwrightmachine", "html_url": "https://github.com/playwrightmachine", "followers_url": "https://api.github.com/users/playwrightmachine/followers", "following_url": "https://api.github.com/users/playwrightmachine/following{/other_user}", "gists_url": "https://api.github.com/users/playwrightmachine/gists{/gist_id}", "starred_url": "https://api.github.com/users/playwrightmachine/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/playwrightmachine/subscriptions", "organizations_url": "https://api.github.com/users/playwrightmachine/orgs", "repos_url": "https://api.github.com/users/playwrightmachine/repos", "events_url": "https://api.github.com/users/playwrightmachine/events{/privacy}", "received_events_url": "https://api.github.com/users/playwrightmachine/received_events", "type": "User", "site_admin": false }, "labels": [ { "id": 2992174511, "node_id": "MDU6TGFiZWwyOTkyMTc0NTEx", "url": "https://api.github.com/repos/microsoft/playwright/labels/CQ1", "name": "CQ1", "color": "BA2AAF", "default": false, "description": "" } ], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 0, "created_at": "2022-12-15T14:25:56Z", "updated_at": "2022-12-15T16:15:09Z", "closed_at": "2022-12-15T16:15:08Z", "author_association": "COLLABORATOR", "active_lock_reason": null, "draft": false, "pull_request": { "url": "https://api.github.com/repos/microsoft/playwright/pulls/19479", "html_url": "https://github.com//pull/19479", "diff_url": "https://github.com//pull/19479.diff", "patch_url": "https://github.com//pull/19479.patch", "merged_at": "2022-12-15T16:15:08Z" }, "body": null, "reactions": { "url": "https://api.github.com/repos//issues/19479/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19479/timeline", "performed_via_github_app": null, "state_reason": null }, { "url": "https://api.github.com/repos//issues/19477", "repository_url": "https://api.github.com/repos/microsoft/playwright", "labels_url": "https://api.github.com/repos//issues/19477/labels{/name}", "comments_url": "https://api.github.com/repos//issues/19477/comments", "events_url": "https://api.github.com/repos//issues/19477/events", "html_url": "https://github.com//pull/19477", "id": 1498372646, "node_id": "PR_kwDODTssw85FivV1", "number": 19477, "title": "feat(chromium): roll to r1040", "user": { "login": "playwrightmachine", "id": 89237858, "node_id": "MDQ6VXNlcjg5MjM3ODU4", "avatar_url": "https://avatars.githubusercontent.com/u/89237858?v=4", "gravatar_id": "", "url": "https://api.github.com/users/playwrightmachine", "html_url": "https://github.com/playwrightmachine", "followers_url": "https://api.github.com/users/playwrightmachine/followers", "following_url": "https://api.github.com/users/playwrightmachine/following{/other_user}", "gists_url": "https://api.github.com/users/playwrightmachine/gists{/gist_id}", "starred_url": "https://api.github.com/users/playwrightmachine/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/playwrightmachine/subscriptions", "organizations_url": "https://api.github.com/users/playwrightmachine/orgs", "repos_url": "https://api.github.com/users/playwrightmachine/repos", "events_url": "https://api.github.com/users/playwrightmachine/events{/privacy}", "received_events_url": "https://api.github.com/users/playwrightmachine/received_events", "type": "User", "site_admin": false }, "labels": [ { "id": 2992174511, "node_id": "MDU6TGFiZWwyOTkyMTc0NTEx", "url": "https://api.github.com/repos/microsoft/playwright/labels/CQ1", "name": "CQ1", "color": "BA2AAF", "default": false, "description": "" } ], "state": "closed", "locked": false, "assignee": null, "assignees": [], "milestone": null, "comments": 0, "created_at": "2022-12-15T12:46:39Z", "updated_at": "2022-12-15T14:53:49Z", "closed_at": "2022-12-15T14:53:48Z", "author_association": "COLLABORATOR", "active_lock_reason": null, "draft": false, "pull_request": { "url": "https://api.github.com/repos/microsoft/playwright/pulls/19477", "html_url": "https://github.com//pull/19477", "diff_url": "https://github.com//pull/19477.diff", "patch_url": "https://github.com//pull/19477.patch", "merged_at": "2022-12-15T14:53:48Z" }, "body": null, "reactions": { "url": "https://api.github.com/repos//issues/19477/reactions", "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 }, "timeline_url": "https://api.github.com/repos//issues/19477/timeline", "performed_via_github_app": null, "state_reason": null } ]

@kapros kapros closed this as completed Dec 19, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

7 participants