Google Chrome 38在devtools中引入了新的"Device Mode & Mobile Emulation"功能。除了选择用于仿真的设备外,还可以emulate different network conditions:
在不同的网络条件下优化网站的性能是 为移动受众开发的一个关键方面。
设备模式的网络调节允许您在a上测试您的网站 各种网络连接,包括Edge,3G甚至离线。 从预设下拉列表中选择一个连接以应用网络 限制和延迟操纵。
例如,我们可以将它设置为过去 - GPRS 50 Kbps:
现在我们有一个很好的用例 - 我们有一个用于网络速度测试的内部应用程序。这种新的仿真功能对手动测试非常有用。但是,我们希望自动化它。
问题是:
是否可以通过指定网络条件下的硒启动镀铬?它可以通过chrome首选项或命令行参数来控制吗?
simulate slow internet connection肯定有多种选择,但问题特别是关于铬+硒。
答案 0 :(得分:24)
用于控制ChromeDriver的网络模拟were added的API。现在应该可以使用一段时间了。根据链接问题中的comment,您应该使用至少2.26的版本,因为有一些错误修正。
根据Selenium changelog绑定可用于这些语言:
如果您需要其他语言的这些绑定,您可能应该打开与上述类似的问题/贡献实现。
Python的示例用法如下:
driver.set_network_conditions(
offline=False,
latency=5, # additional latency (ms)
download_throughput=500 * 1024, # maximal throughput
upload_throughput=500 * 1024) # maximal throughput
答案 1 :(得分:13)
不,无法通过Chrome偏好设置或命令行参数来控制Network Connectivity Emulation。网络连接仿真是内置Chrome调试器的一部分。解决此问题的一种方法是控制调试器。这可以通过扩展或直接控制调试器来完成,请参阅explanation。但是,这不适用于WebDriver。原因是只能有一个" debug" session和WebDriver已经在使用它,请参阅explanation。由于没有公共接口,因此也无法通过WebDriver控制它。
对于Device Mode & Mobile Emulation,它也是内置调试器的一部分,有一个公共接口(details),因此可以被控制。这可以通过WebDriver功能完成。两个选项1)指定设备名称2)输入您自己的参数(有限)。
答案 2 :(得分:5)
虽然这是一个非常受欢迎且有用的功能,但对于严肃的测试,我认为传统的网络模拟方法仍然是可行的方法。
除了那些已经链接的解决方案之外,我知道2个解决方案 - Charles web proxy(非常有用的工具 - 商业化)并使用Linux流量控制实现您自己的配方(例如,参见LAMPe2e的第6章)
通过干扰网络连接而不是浏览器,您可以独立于正在使用的浏览器获得适当的影响度量。
为什么您只想使用Chrome功能?
答案 3 :(得分:4)
确实C#Selenium最新(3.11)添加了NetworkConditions。现在您可以像这样使用它:
var driver = new ChromeDriver(pathToDriver);
driver.NetworkConditions = new ChromeNetworkConditions()
{ DownloadThroughput = 5000, UploadThroughput = 5000, Latency = TimeSpan.FromMilliseconds(5) };
问题是它因为错误而无法使用
所以.Net人员必须等到3.12 Selenium Release。
答案 4 :(得分:2)
看起来很快就会到Selenium(C#)。提交时间是01/28/2018:
答案 5 :(得分:2)
您可以使用此方法在指定的网络条件下运行测试用例
protected void networkThrotting() throws IOException {
Map map = new HashMap();
map.put("offline", false);
map.put("latency", 5);
map.put("download_throughput", 500);
map.put("upload_throughput", 1024);
CommandExecutor executor = ((ChromeDriver)driver).getCommandExecutor();
Response response = executor.execute(
new Command(((ChromeDriver)driver).getSessionId(), "setNetworkConditions", ImmutableMap.of("network_conditions", ImmutableMap.copyOf(map)))
);
}
答案 6 :(得分:1)
我知道这是一个老问题,但是最近我不得不解决此问题,因此该页面位于我的Google搜索的顶部。以下是我在C#中的主要用法。希望这对以后的人有所帮助。
var networkConditions = new ChromeNetworkConditions();
networkConditions.Latency = new TimeSpan(150);
networkConditions.IsOffline = false;
networkConditions.DownloadThroughput = 120 * 1024;
networkConditions.UploadThroughput = 150 * 1024;
Driver.NetworkConditions = networkConditions;
答案 7 :(得分:1)
对于像我这样在 C# 世界中想知道为什么上传/下载吞吐量没有按预期工作的人来说,这些属性的工具提示似乎被错误标记了。工具提示指出数据速率以 kb/s 为单位测量,但根据我自己的经验,它实际上是每秒字节数,因此如果您想使用更熟悉的测量值(如 Mbps),则必须乘以 125,000:
int latencyInMilliseconds = 20;
long downloadLimitMbps = 20;
long uploadLimitMbps = 5;
_driver.NetworkConditions = new ChromeNetworkConditions()
{
Latency = new TimeSpan(0, 0, 0, 0, latencyInMilliseconds),
DownloadThroughput = downloadLimitMbps * 125000, // Mbps to bytes per second
UploadThroughput = uploadLimitMbps * 125000, // Mbps to bytes per second
IsOffline = false,
};
使用这些设置并在我的测试运行时查看网络流量,我可以看到它们导致正好 20Mbps 下降和 5Mbps 上升。