Skip to content

feat: toHaveURL predicate matcher - #34413

Merged
Adam Gastineau (agg23) merged 16 commits into
microsoft:mainfrom
agg23:toHaveURL-predicate
Jan 24, 2025
Merged

feat: toHaveURL predicate matcher#34413
Adam Gastineau (agg23) merged 16 commits into
microsoft:mainfrom
agg23:toHaveURL-predicate

Conversation

@agg23

Copy link
Copy Markdown
Contributor

Addresses the requested functionality of #32708 in a generic way, enabling the user to match on the native rich URL object. This enables patterns for checking for search params, hostnames, and other specific fields of the entire URL.

awaitexpect(page).toHaveURL(url=>url.searchParams.entities().has('foo'));

Care was taken to ensure rich error messages are provided. Examples:

String match failure

awaitexpect(page).toHaveURL('wrong');
Error: Timed out 1000ms waiting for expect(page).toHaveURL(expected)
Expected string: "wrong"
Received string: "data:text/html,<div>A</div>"

Predicate failure

awaitexpect(page).toHaveURL(_url=>false);
Error: Timed out 5000ms waiting for expect(page).toHaveURL(expected)
Expected predicate to succeed
Received string: "data:text/html,<div>A</div>"

Predicate .not failure

awaitexpect(page).not.toHaveURL(_url=>true);
Error: Timed out 5000ms waiting for expect(page).not.toHaveURL(expected)
Expected predicate to fail
Received string: "data:text/html,<div>A</div>"

Invalid argument failure

awaitexpect(page).toHaveURL({});
Error: expect(page).toHaveURL(expected)
Matcher error: expected value must be a string, regular expression, or predicate
Expected has type: object
Expected has value: {}

@github-actions

This comment has been minimized.

Comment threaddocs/src/api/class-pageassertions.md Outdated
Comment threadpackages/playwright/src/matchers/expect.ts Outdated
Comment threadpackages/playwright/src/matchers/error.ts Outdated
Comment threadpackages/playwright/src/matchers/error.ts Outdated
@github-actions

This comment has been minimized.

} else if (expression === 'to.have.title') {
received = this.document.title;
} else if (expression === 'to.have.url') {
received = this.document.location.href;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(Side note, ports are now on their own with this)

@github-actions

This comment has been minimized.

@github-actions

Copy link
Copy Markdown
Contributor

Test results for "tests 1"

2 failed
❌ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:206:5 › mobile viewport › view scale should reset after navigation @webkit-ubuntu-22.04-node18
❌ [webkit-library] › tests/library/video.spec.ts:441:5 › screencast › should work for popups @webkit-ubuntu-22.04-node18

20 flaky⚠️ [firefox-page] › tests/page/page-evaluate.spec.ts:403:3 › should throw for too deep reference chain @firefox-ubuntu-22.04-node18
⚠️ [playwright-test] › tests/ui-mode-trace.spec.ts:341:5 › should work behind reverse proxy @macos-latest-node18-1
⚠️ [chromium-library] › tests/library/video.spec.ts:379:5 › screencast › should capture navigation @ubuntu-20.04-chromium-tip-of-tree
⚠️ [playwright-test] › tests/ui-mode-trace.spec.ts:341:5 › should work behind reverse proxy @ubuntu-latest-node22-1
⚠️ [webkit-library] › tests/library/browsercontext-reuse.spec.ts:50:1 › should reset serviceworker @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:87:5 › mobile viewport › should support window.orientation emulation @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:97:5 › mobile viewport › should fire orientationchange event @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:116:5 › mobile viewport › default mobile viewports to 980 width @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:157:5 › mobile viewport › mouse should work with mobile viewports and cross process navigations @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:175:5 › mobile viewport › should scroll when emulating a mobile viewport @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/defaultbrowsercontext-2.spec.ts:28:3 › should work in persistent context @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/inspector/pause.spec.ts:417:5 › pause › should highlight on explore @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/popup.spec.ts💯3 › should inherit touch support from browser context @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/popup.spec.ts:129:3 › should use viewport size from window features @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/screenshot.spec.ts:206:14 › element screenshot › element screenshot should work with a mobile viewport @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/selector-generator.spec.ts:437:5 › selector generator › should ignore empty aria-label for candidate consideration @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-leaks.spec.ts:82:5 › click should not leak @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-leaks.spec.ts:107:5 › fill should not leak @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-leaks.spec.ts:161:5 › waitFor should not leak @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-screenshot.spec.ts:868:5 › page screenshot animations › should wait for fonts to load @webkit-ubuntu-22.04-node18

37638 passed, 648 skipped
✔️✔️✔️

Merge workflow run.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@agg23@pavelfeldman
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
feat: toHaveURL predicate matcher by agg23 · Pull Request #34413 · microsoft/playwright · GitHub
Skip to content

feat: toHaveURL predicate matcher - #34413

Merged
Adam Gastineau (agg23) merged 16 commits into
microsoft:mainfrom
agg23:toHaveURL-predicate
Jan 24, 2025
Merged

feat: toHaveURL predicate matcher#34413
Adam Gastineau (agg23) merged 16 commits into
microsoft:mainfrom
agg23:toHaveURL-predicate

Conversation

@agg23

Copy link
Copy Markdown
Contributor

Addresses the requested functionality of #32708 in a generic way, enabling the user to match on the native rich URL object. This enables patterns for checking for search params, hostnames, and other specific fields of the entire URL.

awaitexpect(page).toHaveURL(url=>url.searchParams.entities().has('foo'));

Care was taken to ensure rich error messages are provided. Examples:

String match failure

awaitexpect(page).toHaveURL('wrong');
Error: Timed out 1000ms waiting for expect(page).toHaveURL(expected)
Expected string: "wrong"
Received string: "data:text/html,<div>A</div>"

Predicate failure

awaitexpect(page).toHaveURL(_url=>false);
Error: Timed out 5000ms waiting for expect(page).toHaveURL(expected)
Expected predicate to succeed
Received string: "data:text/html,<div>A</div>"

Predicate .not failure

awaitexpect(page).not.toHaveURL(_url=>true);
Error: Timed out 5000ms waiting for expect(page).not.toHaveURL(expected)
Expected predicate to fail
Received string: "data:text/html,<div>A</div>"

Invalid argument failure

awaitexpect(page).toHaveURL({});
Error: expect(page).toHaveURL(expected)
Matcher error: expected value must be a string, regular expression, or predicate
Expected has type: object
Expected has value: {}

@github-actions

This comment has been minimized.

Comment threaddocs/src/api/class-pageassertions.md Outdated
Comment threadpackages/playwright/src/matchers/expect.ts Outdated
Comment threadpackages/playwright/src/matchers/error.ts Outdated
Comment threadpackages/playwright/src/matchers/error.ts Outdated
@github-actions

This comment has been minimized.

} else if (expression === 'to.have.title') {
received = this.document.title;
} else if (expression === 'to.have.url') {
received = this.document.location.href;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(Side note, ports are now on their own with this)

@github-actions

This comment has been minimized.

@github-actions

Copy link
Copy Markdown
Contributor

Test results for "tests 1"

2 failed
❌ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:206:5 › mobile viewport › view scale should reset after navigation @webkit-ubuntu-22.04-node18
❌ [webkit-library] › tests/library/video.spec.ts:441:5 › screencast › should work for popups @webkit-ubuntu-22.04-node18

20 flaky⚠️ [firefox-page] › tests/page/page-evaluate.spec.ts:403:3 › should throw for too deep reference chain @firefox-ubuntu-22.04-node18
⚠️ [playwright-test] › tests/ui-mode-trace.spec.ts:341:5 › should work behind reverse proxy @macos-latest-node18-1
⚠️ [chromium-library] › tests/library/video.spec.ts:379:5 › screencast › should capture navigation @ubuntu-20.04-chromium-tip-of-tree
⚠️ [playwright-test] › tests/ui-mode-trace.spec.ts:341:5 › should work behind reverse proxy @ubuntu-latest-node22-1
⚠️ [webkit-library] › tests/library/browsercontext-reuse.spec.ts:50:1 › should reset serviceworker @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:87:5 › mobile viewport › should support window.orientation emulation @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:97:5 › mobile viewport › should fire orientationchange event @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:116:5 › mobile viewport › default mobile viewports to 980 width @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:157:5 › mobile viewport › mouse should work with mobile viewports and cross process navigations @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:175:5 › mobile viewport › should scroll when emulating a mobile viewport @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/defaultbrowsercontext-2.spec.ts:28:3 › should work in persistent context @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/inspector/pause.spec.ts:417:5 › pause › should highlight on explore @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/popup.spec.ts💯3 › should inherit touch support from browser context @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/popup.spec.ts:129:3 › should use viewport size from window features @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/screenshot.spec.ts:206:14 › element screenshot › element screenshot should work with a mobile viewport @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/selector-generator.spec.ts:437:5 › selector generator › should ignore empty aria-label for candidate consideration @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-leaks.spec.ts:82:5 › click should not leak @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-leaks.spec.ts:107:5 › fill should not leak @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-leaks.spec.ts:161:5 › waitFor should not leak @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-screenshot.spec.ts:868:5 › page screenshot animations › should wait for fonts to load @webkit-ubuntu-22.04-node18

37638 passed, 648 skipped
✔️✔️✔️

Merge workflow run.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@agg23@pavelfeldman
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' feat: toHaveURL predicate matcher by agg23 · Pull Request #34413 · microsoft/playwright · GitHub
Skip to content

feat: toHaveURL predicate matcher - #34413

Merged
Adam Gastineau (agg23) merged 16 commits into
microsoft:mainfrom
agg23:toHaveURL-predicate
Jan 24, 2025
Merged

feat: toHaveURL predicate matcher#34413
Adam Gastineau (agg23) merged 16 commits into
microsoft:mainfrom
agg23:toHaveURL-predicate

Conversation

@agg23

Copy link
Copy Markdown
Contributor

Addresses the requested functionality of #32708 in a generic way, enabling the user to match on the native rich URL object. This enables patterns for checking for search params, hostnames, and other specific fields of the entire URL.

awaitexpect(page).toHaveURL(url=>url.searchParams.entities().has('foo'));

Care was taken to ensure rich error messages are provided. Examples:

String match failure

awaitexpect(page).toHaveURL('wrong');
Error: Timed out 1000ms waiting for expect(page).toHaveURL(expected)
Expected string: "wrong"
Received string: "data:text/html,<div>A</div>"

Predicate failure

awaitexpect(page).toHaveURL(_url=>false);
Error: Timed out 5000ms waiting for expect(page).toHaveURL(expected)
Expected predicate to succeed
Received string: "data:text/html,<div>A</div>"

Predicate .not failure

awaitexpect(page).not.toHaveURL(_url=>true);
Error: Timed out 5000ms waiting for expect(page).not.toHaveURL(expected)
Expected predicate to fail
Received string: "data:text/html,<div>A</div>"

Invalid argument failure

awaitexpect(page).toHaveURL({});
Error: expect(page).toHaveURL(expected)
Matcher error: expected value must be a string, regular expression, or predicate
Expected has type: object
Expected has value: {}

@github-actions

This comment has been minimized.

Comment threaddocs/src/api/class-pageassertions.md Outdated
Comment threadpackages/playwright/src/matchers/expect.ts Outdated
Comment threadpackages/playwright/src/matchers/error.ts Outdated
Comment threadpackages/playwright/src/matchers/error.ts Outdated
@github-actions

This comment has been minimized.

} else if (expression === 'to.have.title') {
received = this.document.title;
} else if (expression === 'to.have.url') {
received = this.document.location.href;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(Side note, ports are now on their own with this)

@github-actions

This comment has been minimized.

@github-actions

Copy link
Copy Markdown
Contributor

Test results for "tests 1"

2 failed
❌ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:206:5 › mobile viewport › view scale should reset after navigation @webkit-ubuntu-22.04-node18
❌ [webkit-library] › tests/library/video.spec.ts:441:5 › screencast › should work for popups @webkit-ubuntu-22.04-node18

20 flaky⚠️ [firefox-page] › tests/page/page-evaluate.spec.ts:403:3 › should throw for too deep reference chain @firefox-ubuntu-22.04-node18
⚠️ [playwright-test] › tests/ui-mode-trace.spec.ts:341:5 › should work behind reverse proxy @macos-latest-node18-1
⚠️ [chromium-library] › tests/library/video.spec.ts:379:5 › screencast › should capture navigation @ubuntu-20.04-chromium-tip-of-tree
⚠️ [playwright-test] › tests/ui-mode-trace.spec.ts:341:5 › should work behind reverse proxy @ubuntu-latest-node22-1
⚠️ [webkit-library] › tests/library/browsercontext-reuse.spec.ts:50:1 › should reset serviceworker @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:87:5 › mobile viewport › should support window.orientation emulation @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:97:5 › mobile viewport › should fire orientationchange event @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:116:5 › mobile viewport › default mobile viewports to 980 width @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:157:5 › mobile viewport › mouse should work with mobile viewports and cross process navigations @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:175:5 › mobile viewport › should scroll when emulating a mobile viewport @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/defaultbrowsercontext-2.spec.ts:28:3 › should work in persistent context @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/inspector/pause.spec.ts:417:5 › pause › should highlight on explore @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/popup.spec.ts💯3 › should inherit touch support from browser context @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/popup.spec.ts:129:3 › should use viewport size from window features @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/screenshot.spec.ts:206:14 › element screenshot › element screenshot should work with a mobile viewport @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/selector-generator.spec.ts:437:5 › selector generator › should ignore empty aria-label for candidate consideration @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-leaks.spec.ts:82:5 › click should not leak @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-leaks.spec.ts:107:5 › fill should not leak @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-leaks.spec.ts:161:5 › waitFor should not leak @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-screenshot.spec.ts:868:5 › page screenshot animations › should wait for fonts to load @webkit-ubuntu-22.04-node18

37638 passed, 648 skipped
✔️✔️✔️

Merge workflow run.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@agg23@pavelfeldman
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' feat: toHaveURL predicate matcher by agg23 · Pull Request #34413 · microsoft/playwright · GitHub
Skip to content

feat: toHaveURL predicate matcher - #34413

Merged
Adam Gastineau (agg23) merged 16 commits into
microsoft:mainfrom
agg23:toHaveURL-predicate
Jan 24, 2025
Merged

feat: toHaveURL predicate matcher#34413
Adam Gastineau (agg23) merged 16 commits into
microsoft:mainfrom
agg23:toHaveURL-predicate

Conversation

@agg23

Copy link
Copy Markdown
Contributor

Addresses the requested functionality of #32708 in a generic way, enabling the user to match on the native rich URL object. This enables patterns for checking for search params, hostnames, and other specific fields of the entire URL.

awaitexpect(page).toHaveURL(url=>url.searchParams.entities().has('foo'));

Care was taken to ensure rich error messages are provided. Examples:

String match failure

awaitexpect(page).toHaveURL('wrong');
Error: Timed out 1000ms waiting for expect(page).toHaveURL(expected)
Expected string: "wrong"
Received string: "data:text/html,<div>A</div>"

Predicate failure

awaitexpect(page).toHaveURL(_url=>false);
Error: Timed out 5000ms waiting for expect(page).toHaveURL(expected)
Expected predicate to succeed
Received string: "data:text/html,<div>A</div>"

Predicate .not failure

awaitexpect(page).not.toHaveURL(_url=>true);
Error: Timed out 5000ms waiting for expect(page).not.toHaveURL(expected)
Expected predicate to fail
Received string: "data:text/html,<div>A</div>"

Invalid argument failure

awaitexpect(page).toHaveURL({});
Error: expect(page).toHaveURL(expected)
Matcher error: expected value must be a string, regular expression, or predicate
Expected has type: object
Expected has value: {}

@github-actions

This comment has been minimized.

Comment threaddocs/src/api/class-pageassertions.md Outdated
Comment threadpackages/playwright/src/matchers/expect.ts Outdated
Comment threadpackages/playwright/src/matchers/error.ts Outdated
Comment threadpackages/playwright/src/matchers/error.ts Outdated
@github-actions

This comment has been minimized.

} else if (expression === 'to.have.title') {
received = this.document.title;
} else if (expression === 'to.have.url') {
received = this.document.location.href;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(Side note, ports are now on their own with this)

@github-actions

This comment has been minimized.

@github-actions

Copy link
Copy Markdown
Contributor

Test results for "tests 1"

2 failed
❌ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:206:5 › mobile viewport › view scale should reset after navigation @webkit-ubuntu-22.04-node18
❌ [webkit-library] › tests/library/video.spec.ts:441:5 › screencast › should work for popups @webkit-ubuntu-22.04-node18

20 flaky⚠️ [firefox-page] › tests/page/page-evaluate.spec.ts:403:3 › should throw for too deep reference chain @firefox-ubuntu-22.04-node18
⚠️ [playwright-test] › tests/ui-mode-trace.spec.ts:341:5 › should work behind reverse proxy @macos-latest-node18-1
⚠️ [chromium-library] › tests/library/video.spec.ts:379:5 › screencast › should capture navigation @ubuntu-20.04-chromium-tip-of-tree
⚠️ [playwright-test] › tests/ui-mode-trace.spec.ts:341:5 › should work behind reverse proxy @ubuntu-latest-node22-1
⚠️ [webkit-library] › tests/library/browsercontext-reuse.spec.ts:50:1 › should reset serviceworker @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:87:5 › mobile viewport › should support window.orientation emulation @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:97:5 › mobile viewport › should fire orientationchange event @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:116:5 › mobile viewport › default mobile viewports to 980 width @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:157:5 › mobile viewport › mouse should work with mobile viewports and cross process navigations @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:175:5 › mobile viewport › should scroll when emulating a mobile viewport @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/defaultbrowsercontext-2.spec.ts:28:3 › should work in persistent context @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/inspector/pause.spec.ts:417:5 › pause › should highlight on explore @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/popup.spec.ts💯3 › should inherit touch support from browser context @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/popup.spec.ts:129:3 › should use viewport size from window features @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/screenshot.spec.ts:206:14 › element screenshot › element screenshot should work with a mobile viewport @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/selector-generator.spec.ts:437:5 › selector generator › should ignore empty aria-label for candidate consideration @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-leaks.spec.ts:82:5 › click should not leak @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-leaks.spec.ts:107:5 › fill should not leak @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-leaks.spec.ts:161:5 › waitFor should not leak @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-screenshot.spec.ts:868:5 › page screenshot animations › should wait for fonts to load @webkit-ubuntu-22.04-node18

37638 passed, 648 skipped
✔️✔️✔️

Merge workflow run.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@agg23@pavelfeldman
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' feat: toHaveURL predicate matcher by agg23 · Pull Request #34413 · microsoft/playwright · GitHub
Skip to content

feat: toHaveURL predicate matcher - #34413

Merged
Adam Gastineau (agg23) merged 16 commits into
microsoft:mainfrom
agg23:toHaveURL-predicate
Jan 24, 2025
Merged

feat: toHaveURL predicate matcher#34413
Adam Gastineau (agg23) merged 16 commits into
microsoft:mainfrom
agg23:toHaveURL-predicate

Conversation

@agg23

Copy link
Copy Markdown
Contributor

Addresses the requested functionality of #32708 in a generic way, enabling the user to match on the native rich URL object. This enables patterns for checking for search params, hostnames, and other specific fields of the entire URL.

awaitexpect(page).toHaveURL(url=>url.searchParams.entities().has('foo'));

Care was taken to ensure rich error messages are provided. Examples:

String match failure

awaitexpect(page).toHaveURL('wrong');
Error: Timed out 1000ms waiting for expect(page).toHaveURL(expected)
Expected string: "wrong"
Received string: "data:text/html,<div>A</div>"

Predicate failure

awaitexpect(page).toHaveURL(_url=>false);
Error: Timed out 5000ms waiting for expect(page).toHaveURL(expected)
Expected predicate to succeed
Received string: "data:text/html,<div>A</div>"

Predicate .not failure

awaitexpect(page).not.toHaveURL(_url=>true);
Error: Timed out 5000ms waiting for expect(page).not.toHaveURL(expected)
Expected predicate to fail
Received string: "data:text/html,<div>A</div>"

Invalid argument failure

awaitexpect(page).toHaveURL({});
Error: expect(page).toHaveURL(expected)
Matcher error: expected value must be a string, regular expression, or predicate
Expected has type: object
Expected has value: {}

@github-actions

This comment has been minimized.

Comment threaddocs/src/api/class-pageassertions.md Outdated
Comment threadpackages/playwright/src/matchers/expect.ts Outdated
Comment threadpackages/playwright/src/matchers/error.ts Outdated
Comment threadpackages/playwright/src/matchers/error.ts Outdated
@github-actions

This comment has been minimized.

} else if (expression === 'to.have.title') {
received = this.document.title;
} else if (expression === 'to.have.url') {
received = this.document.location.href;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(Side note, ports are now on their own with this)

@github-actions

This comment has been minimized.

@github-actions

Copy link
Copy Markdown
Contributor

Test results for "tests 1"

2 failed
❌ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:206:5 › mobile viewport › view scale should reset after navigation @webkit-ubuntu-22.04-node18
❌ [webkit-library] › tests/library/video.spec.ts:441:5 › screencast › should work for popups @webkit-ubuntu-22.04-node18

20 flaky⚠️ [firefox-page] › tests/page/page-evaluate.spec.ts:403:3 › should throw for too deep reference chain @firefox-ubuntu-22.04-node18
⚠️ [playwright-test] › tests/ui-mode-trace.spec.ts:341:5 › should work behind reverse proxy @macos-latest-node18-1
⚠️ [chromium-library] › tests/library/video.spec.ts:379:5 › screencast › should capture navigation @ubuntu-20.04-chromium-tip-of-tree
⚠️ [playwright-test] › tests/ui-mode-trace.spec.ts:341:5 › should work behind reverse proxy @ubuntu-latest-node22-1
⚠️ [webkit-library] › tests/library/browsercontext-reuse.spec.ts:50:1 › should reset serviceworker @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:87:5 › mobile viewport › should support window.orientation emulation @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:97:5 › mobile viewport › should fire orientationchange event @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:116:5 › mobile viewport › default mobile viewports to 980 width @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:157:5 › mobile viewport › mouse should work with mobile viewports and cross process navigations @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:175:5 › mobile viewport › should scroll when emulating a mobile viewport @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/defaultbrowsercontext-2.spec.ts:28:3 › should work in persistent context @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/inspector/pause.spec.ts:417:5 › pause › should highlight on explore @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/popup.spec.ts💯3 › should inherit touch support from browser context @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/popup.spec.ts:129:3 › should use viewport size from window features @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/screenshot.spec.ts:206:14 › element screenshot › element screenshot should work with a mobile viewport @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/selector-generator.spec.ts:437:5 › selector generator › should ignore empty aria-label for candidate consideration @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-leaks.spec.ts:82:5 › click should not leak @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-leaks.spec.ts:107:5 › fill should not leak @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-leaks.spec.ts:161:5 › waitFor should not leak @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-screenshot.spec.ts:868:5 › page screenshot animations › should wait for fonts to load @webkit-ubuntu-22.04-node18

37638 passed, 648 skipped
✔️✔️✔️

Merge workflow run.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@agg23@pavelfeldman
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' feat: toHaveURL predicate matcher by agg23 · Pull Request #34413 · microsoft/playwright · GitHub
Skip to content

feat: toHaveURL predicate matcher - #34413

Merged
Adam Gastineau (agg23) merged 16 commits into
microsoft:mainfrom
agg23:toHaveURL-predicate
Jan 24, 2025
Merged

feat: toHaveURL predicate matcher#34413
Adam Gastineau (agg23) merged 16 commits into
microsoft:mainfrom
agg23:toHaveURL-predicate

Conversation

@agg23

Copy link
Copy Markdown
Contributor

Addresses the requested functionality of #32708 in a generic way, enabling the user to match on the native rich URL object. This enables patterns for checking for search params, hostnames, and other specific fields of the entire URL.

awaitexpect(page).toHaveURL(url=>url.searchParams.entities().has('foo'));

Care was taken to ensure rich error messages are provided. Examples:

String match failure

awaitexpect(page).toHaveURL('wrong');
Error: Timed out 1000ms waiting for expect(page).toHaveURL(expected)
Expected string: "wrong"
Received string: "data:text/html,<div>A</div>"

Predicate failure

awaitexpect(page).toHaveURL(_url=>false);
Error: Timed out 5000ms waiting for expect(page).toHaveURL(expected)
Expected predicate to succeed
Received string: "data:text/html,<div>A</div>"

Predicate .not failure

awaitexpect(page).not.toHaveURL(_url=>true);
Error: Timed out 5000ms waiting for expect(page).not.toHaveURL(expected)
Expected predicate to fail
Received string: "data:text/html,<div>A</div>"

Invalid argument failure

awaitexpect(page).toHaveURL({});
Error: expect(page).toHaveURL(expected)
Matcher error: expected value must be a string, regular expression, or predicate
Expected has type: object
Expected has value: {}

@github-actions

This comment has been minimized.

Comment threaddocs/src/api/class-pageassertions.md Outdated
Comment threadpackages/playwright/src/matchers/expect.ts Outdated
Comment threadpackages/playwright/src/matchers/error.ts Outdated
Comment threadpackages/playwright/src/matchers/error.ts Outdated
@github-actions

This comment has been minimized.

} else if (expression === 'to.have.title') {
received = this.document.title;
} else if (expression === 'to.have.url') {
received = this.document.location.href;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(Side note, ports are now on their own with this)

@github-actions

This comment has been minimized.

@github-actions

Copy link
Copy Markdown
Contributor

Test results for "tests 1"

2 failed
❌ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:206:5 › mobile viewport › view scale should reset after navigation @webkit-ubuntu-22.04-node18
❌ [webkit-library] › tests/library/video.spec.ts:441:5 › screencast › should work for popups @webkit-ubuntu-22.04-node18

20 flaky⚠️ [firefox-page] › tests/page/page-evaluate.spec.ts:403:3 › should throw for too deep reference chain @firefox-ubuntu-22.04-node18
⚠️ [playwright-test] › tests/ui-mode-trace.spec.ts:341:5 › should work behind reverse proxy @macos-latest-node18-1
⚠️ [chromium-library] › tests/library/video.spec.ts:379:5 › screencast › should capture navigation @ubuntu-20.04-chromium-tip-of-tree
⚠️ [playwright-test] › tests/ui-mode-trace.spec.ts:341:5 › should work behind reverse proxy @ubuntu-latest-node22-1
⚠️ [webkit-library] › tests/library/browsercontext-reuse.spec.ts:50:1 › should reset serviceworker @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:87:5 › mobile viewport › should support window.orientation emulation @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:97:5 › mobile viewport › should fire orientationchange event @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:116:5 › mobile viewport › default mobile viewports to 980 width @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:157:5 › mobile viewport › mouse should work with mobile viewports and cross process navigations @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:175:5 › mobile viewport › should scroll when emulating a mobile viewport @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/defaultbrowsercontext-2.spec.ts:28:3 › should work in persistent context @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/inspector/pause.spec.ts:417:5 › pause › should highlight on explore @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/popup.spec.ts💯3 › should inherit touch support from browser context @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/popup.spec.ts:129:3 › should use viewport size from window features @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/screenshot.spec.ts:206:14 › element screenshot › element screenshot should work with a mobile viewport @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/selector-generator.spec.ts:437:5 › selector generator › should ignore empty aria-label for candidate consideration @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-leaks.spec.ts:82:5 › click should not leak @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-leaks.spec.ts:107:5 › fill should not leak @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-leaks.spec.ts:161:5 › waitFor should not leak @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-screenshot.spec.ts:868:5 › page screenshot animations › should wait for fonts to load @webkit-ubuntu-22.04-node18

37638 passed, 648 skipped
✔️✔️✔️

Merge workflow run.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@agg23@pavelfeldman
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' feat: toHaveURL predicate matcher by agg23 · Pull Request #34413 · microsoft/playwright · GitHub
Skip to content

feat: toHaveURL predicate matcher - #34413

Merged
Adam Gastineau (agg23) merged 16 commits into
microsoft:mainfrom
agg23:toHaveURL-predicate
Jan 24, 2025
Merged

feat: toHaveURL predicate matcher#34413
Adam Gastineau (agg23) merged 16 commits into
microsoft:mainfrom
agg23:toHaveURL-predicate

Conversation

@agg23

Copy link
Copy Markdown
Contributor

Addresses the requested functionality of #32708 in a generic way, enabling the user to match on the native rich URL object. This enables patterns for checking for search params, hostnames, and other specific fields of the entire URL.

awaitexpect(page).toHaveURL(url=>url.searchParams.entities().has('foo'));

Care was taken to ensure rich error messages are provided. Examples:

String match failure

awaitexpect(page).toHaveURL('wrong');
Error: Timed out 1000ms waiting for expect(page).toHaveURL(expected)
Expected string: "wrong"
Received string: "data:text/html,<div>A</div>"

Predicate failure

awaitexpect(page).toHaveURL(_url=>false);
Error: Timed out 5000ms waiting for expect(page).toHaveURL(expected)
Expected predicate to succeed
Received string: "data:text/html,<div>A</div>"

Predicate .not failure

awaitexpect(page).not.toHaveURL(_url=>true);
Error: Timed out 5000ms waiting for expect(page).not.toHaveURL(expected)
Expected predicate to fail
Received string: "data:text/html,<div>A</div>"

Invalid argument failure

awaitexpect(page).toHaveURL({});
Error: expect(page).toHaveURL(expected)
Matcher error: expected value must be a string, regular expression, or predicate
Expected has type: object
Expected has value: {}

@github-actions

This comment has been minimized.

Comment threaddocs/src/api/class-pageassertions.md Outdated
Comment threadpackages/playwright/src/matchers/expect.ts Outdated
Comment threadpackages/playwright/src/matchers/error.ts Outdated
Comment threadpackages/playwright/src/matchers/error.ts Outdated
@github-actions

This comment has been minimized.

} else if (expression === 'to.have.title') {
received = this.document.title;
} else if (expression === 'to.have.url') {
received = this.document.location.href;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(Side note, ports are now on their own with this)

@github-actions

This comment has been minimized.

@github-actions

Copy link
Copy Markdown
Contributor

Test results for "tests 1"

2 failed
❌ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:206:5 › mobile viewport › view scale should reset after navigation @webkit-ubuntu-22.04-node18
❌ [webkit-library] › tests/library/video.spec.ts:441:5 › screencast › should work for popups @webkit-ubuntu-22.04-node18

20 flaky⚠️ [firefox-page] › tests/page/page-evaluate.spec.ts:403:3 › should throw for too deep reference chain @firefox-ubuntu-22.04-node18
⚠️ [playwright-test] › tests/ui-mode-trace.spec.ts:341:5 › should work behind reverse proxy @macos-latest-node18-1
⚠️ [chromium-library] › tests/library/video.spec.ts:379:5 › screencast › should capture navigation @ubuntu-20.04-chromium-tip-of-tree
⚠️ [playwright-test] › tests/ui-mode-trace.spec.ts:341:5 › should work behind reverse proxy @ubuntu-latest-node22-1
⚠️ [webkit-library] › tests/library/browsercontext-reuse.spec.ts:50:1 › should reset serviceworker @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:87:5 › mobile viewport › should support window.orientation emulation @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:97:5 › mobile viewport › should fire orientationchange event @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:116:5 › mobile viewport › default mobile viewports to 980 width @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:157:5 › mobile viewport › mouse should work with mobile viewports and cross process navigations @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:175:5 › mobile viewport › should scroll when emulating a mobile viewport @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/defaultbrowsercontext-2.spec.ts:28:3 › should work in persistent context @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/inspector/pause.spec.ts:417:5 › pause › should highlight on explore @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/popup.spec.ts💯3 › should inherit touch support from browser context @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/popup.spec.ts:129:3 › should use viewport size from window features @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/screenshot.spec.ts:206:14 › element screenshot › element screenshot should work with a mobile viewport @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/selector-generator.spec.ts:437:5 › selector generator › should ignore empty aria-label for candidate consideration @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-leaks.spec.ts:82:5 › click should not leak @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-leaks.spec.ts:107:5 › fill should not leak @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-leaks.spec.ts:161:5 › waitFor should not leak @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-screenshot.spec.ts:868:5 › page screenshot animations › should wait for fonts to load @webkit-ubuntu-22.04-node18

37638 passed, 648 skipped
✔️✔️✔️

Merge workflow run.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@agg23@pavelfeldman
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); feat: toHaveURL predicate matcher by agg23 · Pull Request #34413 · microsoft/playwright · GitHub
Skip to content

feat: toHaveURL predicate matcher - #34413

Merged
Adam Gastineau (agg23) merged 16 commits into
microsoft:mainfrom
agg23:toHaveURL-predicate
Jan 24, 2025
Merged

feat: toHaveURL predicate matcher#34413
Adam Gastineau (agg23) merged 16 commits into
microsoft:mainfrom
agg23:toHaveURL-predicate

Conversation

@agg23

Copy link
Copy Markdown
Contributor

Addresses the requested functionality of #32708 in a generic way, enabling the user to match on the native rich URL object. This enables patterns for checking for search params, hostnames, and other specific fields of the entire URL.

awaitexpect(page).toHaveURL(url=>url.searchParams.entities().has('foo'));

Care was taken to ensure rich error messages are provided. Examples:

String match failure

awaitexpect(page).toHaveURL('wrong');
Error: Timed out 1000ms waiting for expect(page).toHaveURL(expected)
Expected string: "wrong"
Received string: "data:text/html,<div>A</div>"

Predicate failure

awaitexpect(page).toHaveURL(_url=>false);
Error: Timed out 5000ms waiting for expect(page).toHaveURL(expected)
Expected predicate to succeed
Received string: "data:text/html,<div>A</div>"

Predicate .not failure

awaitexpect(page).not.toHaveURL(_url=>true);
Error: Timed out 5000ms waiting for expect(page).not.toHaveURL(expected)
Expected predicate to fail
Received string: "data:text/html,<div>A</div>"

Invalid argument failure

awaitexpect(page).toHaveURL({});
Error: expect(page).toHaveURL(expected)
Matcher error: expected value must be a string, regular expression, or predicate
Expected has type: object
Expected has value: {}

@github-actions

This comment has been minimized.

Comment threaddocs/src/api/class-pageassertions.md Outdated
Comment threadpackages/playwright/src/matchers/expect.ts Outdated
Comment threadpackages/playwright/src/matchers/error.ts Outdated
Comment threadpackages/playwright/src/matchers/error.ts Outdated
@github-actions

This comment has been minimized.

} else if (expression === 'to.have.title') {
received = this.document.title;
} else if (expression === 'to.have.url') {
received = this.document.location.href;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(Side note, ports are now on their own with this)

@github-actions

This comment has been minimized.

@github-actions

Copy link
Copy Markdown
Contributor

Test results for "tests 1"

2 failed
❌ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:206:5 › mobile viewport › view scale should reset after navigation @webkit-ubuntu-22.04-node18
❌ [webkit-library] › tests/library/video.spec.ts:441:5 › screencast › should work for popups @webkit-ubuntu-22.04-node18

20 flaky⚠️ [firefox-page] › tests/page/page-evaluate.spec.ts:403:3 › should throw for too deep reference chain @firefox-ubuntu-22.04-node18
⚠️ [playwright-test] › tests/ui-mode-trace.spec.ts:341:5 › should work behind reverse proxy @macos-latest-node18-1
⚠️ [chromium-library] › tests/library/video.spec.ts:379:5 › screencast › should capture navigation @ubuntu-20.04-chromium-tip-of-tree
⚠️ [playwright-test] › tests/ui-mode-trace.spec.ts:341:5 › should work behind reverse proxy @ubuntu-latest-node22-1
⚠️ [webkit-library] › tests/library/browsercontext-reuse.spec.ts:50:1 › should reset serviceworker @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:87:5 › mobile viewport › should support window.orientation emulation @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:97:5 › mobile viewport › should fire orientationchange event @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:116:5 › mobile viewport › default mobile viewports to 980 width @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:157:5 › mobile viewport › mouse should work with mobile viewports and cross process navigations @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/browsercontext-viewport-mobile.spec.ts:175:5 › mobile viewport › should scroll when emulating a mobile viewport @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/defaultbrowsercontext-2.spec.ts:28:3 › should work in persistent context @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/inspector/pause.spec.ts:417:5 › pause › should highlight on explore @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/popup.spec.ts💯3 › should inherit touch support from browser context @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/popup.spec.ts:129:3 › should use viewport size from window features @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/screenshot.spec.ts:206:14 › element screenshot › element screenshot should work with a mobile viewport @webkit-ubuntu-22.04-node18
⚠️ [webkit-library] › tests/library/selector-generator.spec.ts:437:5 › selector generator › should ignore empty aria-label for candidate consideration @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-leaks.spec.ts:82:5 › click should not leak @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-leaks.spec.ts:107:5 › fill should not leak @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-leaks.spec.ts:161:5 › waitFor should not leak @webkit-ubuntu-22.04-node18
⚠️ [webkit-page] › tests/page/page-screenshot.spec.ts:868:5 › page screenshot animations › should wait for fonts to load @webkit-ubuntu-22.04-node18

37638 passed, 648 skipped
✔️✔️✔️

Merge workflow run.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@agg23@pavelfeldman