|
1 | 1 | let puppeteer; |
2 | 2 | const wait = require('../../lib/utils/wait'); |
3 | | -const cheerio = require('cheerio'); |
4 | 3 |
|
5 | 4 | let browser = null; |
6 | 5 |
|
@@ -47,38 +46,26 @@ describe('puppeteer', () => { |
47 | 46 | puppeteer = require('../../lib/utils/puppeteer'); |
48 | 47 | browser = await puppeteer({ stealth: false }); |
49 | 48 | const page = await browser.newPage(); |
50 | | - await page.goto('https://bot.sannysoft.com'); |
51 | | - |
52 | | - const html = await page.evaluate(() => document.body.innerHTML); |
53 | | - const $ = cheerio.load(html); |
54 | | - browser.close(); |
55 | | - browser = null; |
56 | | - |
57 | | - const webDriverTest = $('tbody tr').eq(2).find('td').eq(1).text().trim(); |
58 | | - const chromeTest = $('tbody tr').eq(4).find('td').eq(1).text().trim(); |
| 49 | + await page.goto('https://bot.sannysoft.com', { waitUntil: 'networkidle0' }); |
| 50 | + // page rendering is not instant, wait for expected elements to appear |
| 51 | + const [webDriverTest, chromeTest] = await Promise.all(['webdriver', 'chrome'].map((t) => page.waitForSelector(`td#${t}-result.result.failed`).then((hd) => hd.evaluate((e) => e.textContent)))); |
59 | 52 | // the website return empty string from time to time for no reason |
60 | 53 | // since we don't really care whether puppeteer without stealth passes the bot test, just let it go |
61 | 54 | expect(['present (failed)', '']).toContain(webDriverTest); |
62 | 55 | expect(['missing (failed)', '']).toContain(chromeTest); |
63 | | - }, 10000); |
| 56 | + }, 15000); |
64 | 57 |
|
65 | 58 | it('puppeteer with stealth', async () => { |
66 | 59 | puppeteer = require('../../lib/utils/puppeteer'); |
67 | 60 | browser = await puppeteer({ stealth: true }); |
68 | 61 | const page = await browser.newPage(); |
69 | | - await page.goto('https://bot.sannysoft.com'); |
70 | | - |
71 | | - const html = await page.evaluate(() => document.body.innerHTML); |
72 | | - const $ = cheerio.load(html); |
73 | | - browser.close(); |
74 | | - browser = null; |
75 | | - |
76 | | - const webDriverTest = $('tbody tr').eq(2).find('td').eq(1).text().trim(); |
77 | | - const chromeTest = $('tbody tr').eq(4).find('td').eq(1).text().trim(); |
| 62 | + await page.goto('https://bot.sannysoft.com', { waitUntil: 'networkidle0' }); |
| 63 | + // page rendering is not instant, wait for expected elements to appear |
| 64 | + const [webDriverTest, chromeTest] = await Promise.all(['webdriver', 'chrome'].map((t) => page.waitForSelector(`td#${t}-result.result.passed`).then((hd) => hd.evaluate((e) => e.textContent)))); |
78 | 65 | // these are something we really care about |
79 | 66 | expect(webDriverTest).toBe('missing (passed)'); |
80 | 67 | expect(chromeTest).toBe('present (passed)'); |
81 | | - }, 10000); |
| 68 | + }, 15000); |
82 | 69 |
|
83 | 70 | it('puppeteer accept proxy uri', async () => { |
84 | 71 | process.env.PROXY_URI = 'http://user:pass@rsshub.proxy:2333'; |
|
0 commit comments