-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathverify-dismiss.js
More file actions
71 lines (61 loc) · 2.95 KB
/
Copy pathverify-dismiss.js
File metadata and controls
71 lines (61 loc) · 2.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
const { chromium } = require('playwright');
const fs = require('fs');
const path = require('path');
const EXT_PATH = path.resolve(__dirname, 'extension');
const SHOTS_DIR = path.resolve(__dirname, 'screenshots');
fs.mkdirSync(SHOTS_DIR, { recursive: true });
const SITE = process.argv[2];
const LABEL = process.argv[3] || 'site';
(async () => {
const context = await chromium.launchPersistentContext('', {
headless: false,
args: [
`--disable-extensions-except=${EXT_PATH}`,
`--load-extension=${EXT_PATH}`,
'--no-first-run',
'--no-default-browser-check'
]
});
const page = await context.newPage();
page.on('console', msg => console.log(' [page]', msg.text()));
page.on('pageerror', err => console.log(' [pageerror]', err.message));
console.log(`\n[${LABEL}] Loading:`, SITE);
await page.goto(SITE, { waitUntil: 'domcontentloaded', timeout: 30000 });
console.log(`[${LABEL}] Final URL:`, page.url());
await page.waitForTimeout(4000);
for (let i = 0; i < 4; i++) { await page.mouse.wheel(0, 700); await page.waitForTimeout(1200); }
await page.screenshot({ path: path.join(SHOTS_DIR, `dismiss-${LABEL}-1-feed.png`) });
const badgeCount = await page.evaluate(() => document.querySelectorAll('.tshuva-badge').length);
console.log(`[${LABEL}] Badges found:`, badgeCount);
if (badgeCount === 0) {
const debug = await page.evaluate(() => ({
mascotPresent: !!document.getElementById('tshuva-mascot-wrapper'),
selectorMatches: document.querySelectorAll(({
'reddit.com':'[data-testid=\'post-content\'] h3, .Post h3',
'threads.net':'div[dir=\'auto\'] span',
'linkedin.com':'.feed-shared-update-v2__description span, .update-components-text span',
})[location.hostname.replace('www.','')] || 'NONE').length,
textSample: [...document.querySelectorAll('div[dir="auto"] span')].slice(0,3).map(e=>e.textContent.slice(0,40)),
}));
console.log(`[${LABEL}] Debug:`, JSON.stringify(debug));
console.log(`[${LABEL}] No badges — cannot test dismiss.`);
await context.close();
return;
}
// Click the dismiss (✕) button on the first badge
const dismissBtn = await page.$('.tshuva-badge .tshuva-badge-dismiss');
const box = await dismissBtn.boundingBox();
console.log(`[${LABEL}] Clicking dismiss button at`, box);
await dismissBtn.click();
await page.waitForTimeout(1500);
await page.screenshot({ path: path.join(SHOTS_DIR, `dismiss-${LABEL}-2-after-click.png`) });
// Was a native platform menu opened by menuBtn.click()?
const menuOpen = await page.evaluate(() =>
!!document.querySelector('[role="menu"], [role="listbox"], [data-testid="post-overflow-menu"], .artdeco-dropdown__content')
);
console.log(`[${LABEL}] Native menu still open after dismiss attempt:`, menuOpen);
await page.waitForTimeout(1000);
await page.screenshot({ path: path.join(SHOTS_DIR, `dismiss-${LABEL}-3-final.png`) });
console.log(`[${LABEL}] Done.`);
await context.close();
})();