You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.5 KiB
77 lines
2.5 KiB
import { chromium } from "playwright";
|
|
|
|
async function main() {
|
|
const browser = await chromium.launch({ headless: true });
|
|
const page = await browser.newPage();
|
|
await page.goto(
|
|
"https://www.priority1.com/instant-freight-quotes/#New%20Step%201",
|
|
{ waitUntil: "domcontentloaded" },
|
|
);
|
|
await page.locator("#container-mh").waitFor({ state: "visible", timeout: 60_000 });
|
|
await page.waitForTimeout(2000);
|
|
|
|
const before = await page.evaluate(() => {
|
|
return [...document.querySelectorAll("#origin-zip")].map((el, i) => {
|
|
const input = el as HTMLInputElement;
|
|
const r = el.getBoundingClientRect();
|
|
return {
|
|
i,
|
|
inMh: !!el.closest("#container-mh"),
|
|
visible: r.width > 0 && r.height > 0,
|
|
disabled: input.disabled,
|
|
value: input.value,
|
|
};
|
|
});
|
|
});
|
|
console.log("before LTL:", JSON.stringify(before, null, 2));
|
|
|
|
await page.locator("#cb_st_ltl").click({ noWaitAfter: true });
|
|
await page.waitForTimeout(1500);
|
|
await page.locator("#container-mh #origin-zip").waitFor({ state: "visible" });
|
|
|
|
const after = await page.evaluate(() => {
|
|
return [...document.querySelectorAll("#origin-zip")].map((el, i) => {
|
|
const input = el as HTMLInputElement;
|
|
const r = el.getBoundingClientRect();
|
|
return {
|
|
i,
|
|
inMh: !!el.closest("#container-mh"),
|
|
visible: r.width > 0 && r.height > 0,
|
|
disabled: input.disabled,
|
|
value: input.value,
|
|
};
|
|
});
|
|
});
|
|
console.log("after LTL:", JSON.stringify(after, null, 2));
|
|
|
|
const loc = page.locator("#container-mh #origin-zip").first();
|
|
console.log("visible:", await loc.isVisible());
|
|
console.log("enabled:", await loc.isEnabled());
|
|
|
|
try {
|
|
await loc.click({ noWaitAfter: true });
|
|
await loc.fill("10118", { timeout: 10_000, force: true });
|
|
console.log("fill ok, value:", await loc.inputValue());
|
|
} catch (e) {
|
|
console.log("fill failed:", e instanceof Error ? e.message : e);
|
|
}
|
|
|
|
const loc2 = page.locator("#container-mh #origin-zip").first();
|
|
try {
|
|
await loc2.click({ noWaitAfter: true });
|
|
await loc2.pressSequentially("10118", { delay: 30 });
|
|
await loc2.evaluate((el) => {
|
|
el.dispatchEvent(new Event("input", { bubbles: true }));
|
|
el.dispatchEvent(new Event("change", { bubbles: true }));
|
|
el.dispatchEvent(new Event("blur", { bubbles: true }));
|
|
});
|
|
console.log("sequential ok, value:", await loc2.inputValue());
|
|
} catch (e) {
|
|
console.log("sequential failed:", e instanceof Error ? e.message : e);
|
|
}
|
|
|
|
await browser.close();
|
|
}
|
|
|
|
main().catch(console.error);
|