我正在使用Selenium Webdriver(Java)运行测试,并且在测试的一半时间我想将浏览器设置为脱机,执行几个步骤并再次打开浏览器连接。有没有一种简单的方法可以做到这一点,或者可能将浏览器代理更改为不存在的(离线模拟)并重新设置为有效的内容?我需要在线,离线和在线之间保持浏览器缓存,浏览器本地存储区域和浏览器cookie。
由于
答案 0 :(得分:1)
您可以通过将WebDrivers PageLoadTimeout设置为零来伪造它。
在C#中,这对我有用:
driver.Manage().Timeouts().SetPageLoadTimeout(new TimeSpan(0));
我在Java中猜测它会是这样的:
driver.manage().timeouts().pageLoadTimeout(0, TimeUnit.SECONDS);
完成此操作后,您可以将其恢复至30秒或某些内容,因为某些帖子已指示默认值为。
pageLoadTimeout的来源:https://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/WebDriver.Timeouts.html
默认时间:https://sqa.stackexchange.com/questions/2606/what-is-seleniums-default-timeout-for-page-loading
答案 1 :(得分:1)
如果你正在使用java和Windows 7那么你可以调用cmd并通过发布来关闭网络并使用/ renew来打开网络。这个对我有用 。
Process p = Runtime.getRuntime().exec("cmd /c ipconfig /release");
p = Runtime.getRuntime().exec("cmd /c ipconfig /renew");
答案 2 :(得分:0)
我正在努力解决这个问题。
如果你愿意超越硒,那么chrome-remote-interface可能会买单。
以下是相关的代码段
const CDP = require('chrome-remote-interface');
const fs = require('fs');
CDP(async (client) => {
function setOffline(){
return Network.emulateNetworkConditions({offline: true,
latency: 100,
downloadThroughput: 750 * 1024 / 8,
uploadThroughput: 250 * 1024 / 8});
}
const {Page, Network} = client;
try {
await Page.enable();
await Network.enable();
await setOffline();
await Page.navigate({url: 'https://github.com'});
await Page.loadEventFired();
const {data} = await Page.captureScreenshot();
fs.writeFileSync('scrot.png', Buffer.from(data, 'base64'));
} catch (err) {
console.error(err);
} finally {
await client.close();
}
}).on('error', (err) => {
console.error(err);
});