Skip to content

Commit 6993884

Browse files
OrKoNDevtools-frontend LUCI CQ
authored andcommitted
Revert "Port devtools/service-workers/resources/user-agent-override-worker.js to a non-hosted e2e test"
This reverts commit a252a43. Reason for revert: it looks like changes in the network helper cause persistent failures for e2e (hosted) tests on Macs (arm64 and intel): https://ci.chromium.org/ui/p/devtools-frontend/builders/ci/Stand-alone%20Mac-arm64/7042/overview Bug: 40733722 Original change's description: > Port devtools/service-workers/resources/user-agent-override-worker.js to a non-hosted e2e test > > Bug: 40733722 > Change-Id: I419f7e63eecf90851da975fddeb0c012759d695d > Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6589778 > Commit-Queue: Alex Rudenko <alexrudenko@chromium.org> > Auto-Submit: Danil Somsikov <dsv@chromium.org> > Reviewed-by: Alex Rudenko <alexrudenko@chromium.org> Bug: 40733722 No-Presubmit: true No-Tree-Checks: true No-Try: true Change-Id: I11cbd9eab783b5273713368c1f6c3fd2dfb9a8f3 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6596984 Auto-Submit: Alex Rudenko <alexrudenko@chromium.org> Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
1 parent 4a20472 commit 6993884

File tree

6 files changed

+50
-138
lines changed

6 files changed

+50
-138
lines changed

test/e2e/helpers/network-helpers.ts

Lines changed: 44 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -4,32 +4,31 @@
44

55
import type * as puppeteer from 'puppeteer-core';
66

7-
import type {DevToolsPage} from '../../e2e_non_hosted/shared/frontend-helper.js';
87
import {
98
$,
9+
$$,
1010
click,
11+
getBrowserAndPages,
1112
goToResource,
1213
setCheckBox,
1314
typeText,
1415
waitFor,
16+
waitForAria,
1517
waitForFunction,
1618
} from '../../shared/helper.js';
17-
import {getBrowserAndPagesWrappers} from '../../shared/non_hosted_wrappers.js';
1819

1920
import {veImpression} from './visual-logging-helpers.js';
2021

2122
const REQUEST_LIST_SELECTOR = '.network-log-grid tbody';
2223

23-
export async function waitForNetworkTab(devToolsPage: DevToolsPage = getBrowserAndPagesWrappers().devToolsPage):
24-
Promise<void> {
24+
export async function waitForNetworkTab(): Promise<void> {
2525
// Make sure the network tab is shown on the screen
26-
await devToolsPage.waitFor('.network-log-grid');
26+
await waitFor('.network-log-grid');
2727
}
2828

29-
export async function openNetworkTab(devToolsPage: DevToolsPage = getBrowserAndPagesWrappers().devToolsPage):
30-
Promise<void> {
31-
await devToolsPage.click('#tab-network');
32-
await waitForNetworkTab(devToolsPage);
29+
export async function openNetworkTab(): Promise<void> {
30+
await click('#tab-network');
31+
await waitForNetworkTab();
3332
}
3433

3534
/**
@@ -45,17 +44,16 @@ export async function navigateToNetworkTab(testName: string) {
4544
* @param numberOfRequests The expected number of requests to wait for.
4645
* @param selector Optional. The selector to use to get the list of requests.
4746
*/
48-
export async function waitForSomeRequestsToAppear(
49-
numberOfRequests: number, devToolsPage: DevToolsPage = getBrowserAndPagesWrappers().devToolsPage) {
50-
await devToolsPage.waitForFunction(async () => {
51-
const requests = await getAllRequestNames(devToolsPage);
47+
export async function waitForSomeRequestsToAppear(numberOfRequests: number) {
48+
await waitForFunction(async () => {
49+
const requests = await getAllRequestNames();
5250
return requests.length >= numberOfRequests && Boolean(requests.map(name => name ? name.trim() : '').join(''));
5351
});
5452
}
5553

56-
export async function getAllRequestNames(devToolsPage: DevToolsPage = getBrowserAndPagesWrappers().devToolsPage) {
57-
const requests = await devToolsPage.$$(REQUEST_LIST_SELECTOR + ' .name-column');
58-
return await Promise.all(requests.map(request => request.evaluate(r => r.deepInnerText().split('\n')[0])));
54+
export async function getAllRequestNames() {
55+
const requests = await $$(REQUEST_LIST_SELECTOR + ' .name-column');
56+
return await Promise.all(requests.map(request => request.evaluate(r => r.childNodes[2].textContent)));
5957
}
6058

6159
export async function getNumberOfRequests() {
@@ -72,17 +70,31 @@ export async function getSelectedRequestName() {
7270
});
7371
}
7472

75-
export async function selectRequestByName(
76-
name: string, clickOptions?: puppeteer.ClickOptions,
77-
devToolsPage: DevToolsPage = getBrowserAndPagesWrappers().devToolsPage) {
78-
const requests = await devToolsPage.$$(REQUEST_LIST_SELECTOR + ' .name-column');
79-
const names = await Promise.all(requests.map(request => request.evaluate(r => r.deepInnerText().split('\n')[0])));
80-
const index = names.findIndex(n => n === name);
81-
if (index === -1) {
82-
assert.fail(`Request "${name}" not found.`);
73+
export async function selectRequestByName(name: string, clickOptions?: puppeteer.ClickOptions) {
74+
const selector = REQUEST_LIST_SELECTOR + ' .name-column';
75+
const {frontend} = getBrowserAndPages();
76+
77+
// Finding he click position is done in a single frontend.evaluate call
78+
// to make sure the element still exists after finding the element.
79+
// If this were done outside of evaluate code, it would be possible for an
80+
// element to be removed from the dom between the $$(.selector) call and the
81+
// click(element) call.
82+
const rect = await frontend.evaluate((name, selector) => {
83+
const elements = document.querySelectorAll(selector);
84+
for (const element of elements) {
85+
if (element.childNodes[2].textContent === name) {
86+
const {left, top, width, height} = element.getBoundingClientRect();
87+
return {left, top, width, height};
88+
}
89+
}
90+
return null;
91+
}, name, selector);
92+
93+
if (rect) {
94+
const x = rect.left + rect.width * 0.5;
95+
const y = rect.top + rect.height * 0.5;
96+
await frontend.mouse.click(x, y, clickOptions);
8397
}
84-
const request = requests[index];
85-
await request.click(clickOptions);
8698
}
8799

88100
export async function waitForSelectedRequestChange(initialRequestName: string|null) {
@@ -96,9 +108,8 @@ export async function setPersistLog(persist: boolean) {
96108
await setCheckBox('[title="Do not clear log on page reload / navigation"]', persist);
97109
}
98110

99-
export async function setCacheDisabled(
100-
disabled: boolean, devToolsPage: DevToolsPage = getBrowserAndPagesWrappers().devToolsPage): Promise<void> {
101-
await devToolsPage.setCheckBox('[title^="Disable cache"]', disabled);
111+
export async function setCacheDisabled(disabled: boolean): Promise<void> {
112+
await setCheckBox('[title^="Disable cache"]', disabled);
102113
}
103114

104115
export async function setInvert(invert: boolean) {
@@ -115,12 +126,11 @@ export async function clearTimeWindow(): Promise<void> {
115126
await overviewGridCursorArea.click({count: 2});
116127
}
117128

118-
export async function setTextFilter(
119-
text: string, devToolsPage: DevToolsPage = getBrowserAndPagesWrappers().devToolsPage): Promise<void> {
120-
const toolbarHandle = await devToolsPage.waitFor('.text-filter');
121-
const input = await devToolsPage.waitForAria('Filter', toolbarHandle);
129+
export async function setTextFilter(text: string): Promise<void> {
130+
const toolbarHandle = await waitFor('.text-filter');
131+
const input = await waitForAria('Filter', toolbarHandle);
122132
await input.focus();
123-
await typeText(text, devToolsPage);
133+
await typeText(text);
124134
}
125135

126136
export async function getTextFilterContent(): Promise<string> {

test/e2e_non_hosted/BUILD.gn

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ node_ts_library("tests") {
1717
"../conductor:implementation",
1818
"ai_assistance",
1919
"animations",
20-
"application",
2120
"assertion",
2221
"console",
2322
"coverage",

test/e2e_non_hosted/application/BUILD.gn

Lines changed: 0 additions & 17 deletions
This file was deleted.

test/e2e_non_hosted/application/user-agent-override_test.ts

Lines changed: 0 additions & 75 deletions
This file was deleted.

test/e2e_non_hosted/conductor/state-provider.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,8 @@ export class StateProvider {
4343
} catch (e) {
4444
throw await screenshotError(state, e);
4545
} finally {
46-
try {
47-
await browsingContext.close();
48-
} catch {
49-
} finally {
50-
dumpCollectedErrors();
51-
}
46+
await browsingContext.close();
47+
dumpCollectedErrors();
5248
}
5349
}
5450

test/shared/helper.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@ export const doubleClick =
8686
return await devToolsPage.doubleClick(selector, options);
8787
};
8888

89-
export const typeText =
90-
async (text: string, devToolsPage: DevToolsPage = getBrowserAndPagesWrappers().devToolsPage) => {
89+
export const typeText = async (text: string) => {
90+
const {devToolsPage} = getBrowserAndPagesWrappers();
9191
await devToolsPage.typeText(text);
9292
};
9393

@@ -550,9 +550,8 @@ export async function renderCoordinatorQueueEmpty(): Promise<void> {
550550
await devToolsPage.renderCoordinatorQueueEmpty();
551551
}
552552

553-
export async function setCheckBox(
554-
selector: string, wantChecked: boolean,
555-
devToolsPage: DevToolsPage = getBrowserAndPagesWrappers().devToolsPage): Promise<void> {
553+
export async function setCheckBox(selector: string, wantChecked: boolean): Promise<void> {
554+
const {devToolsPage} = getBrowserAndPagesWrappers();
556555
await devToolsPage.setCheckBox(selector, wantChecked);
557556
}
558557

0 commit comments

Comments
 (0)