48

Google Chrome 38 では、devtoolsに新しい「デバイス モードとモバイル エミュレーション」機能が導入されました。エミュレーション用のデバイスを選択するだけでなく、さまざまなネットワーク条件をエミュレートすることもできます。

さまざまなネットワーク条件の下でサイトのパフォーマンスを最適化することは、モバイル ユーザー向けの開発の重要な側面です。

デバイス モードのネットワーク コンディショニングにより、Edge、3G、オフラインなど、さまざまなネットワーク接続でサイトをテストできます。プリセット ドロップダウンから接続を選択して、ネットワーク スロットリングと遅延操作を適用します。

たとえば、古き良き時代の GPRS 50 Kbps のように設定できます。

ここに画像の説明を入力

ネットワーク速度テスト用の内部アプリケーションがあります。この新しいエミュレーション機能は、手動テストに非常に役立ちます。しかし、私たちはそれを自動化したいと考えています。

質問は:

指定されたネットワーク条件でセレン経由でクロムを起動することは可能ですか? Chrome の設定やコマンドライン引数で制御できるものですか?


遅いインターネット接続をシミュレートするオプションは確かに複数ありますが、問題は特にクロム+セレンに関するものです。

4

10 に答える 10

48

ネットワーク エミュレーションを制御する API がChromeDriverに追加されました。そして、かなり長い間利用できるはずです。リンクされた問題のコメントによると、バグ修正のため、バージョン 2.26 以降を使用する必要があります。

Selenium changelogバインディングによると、これらの言語で利用できます。

  • バージョン 3.4.0 以降の JavaScript ( commit )
  • バージョン 3.5.0 以降の Python ( commit )
  • バージョン 3.11.0 の Ruby ( commit )
  • バージョン 4 以降の C# ( commit )

他の言語でこれらのバインディングが必要な場合は、おそらく上記のいずれかと同様の問題/貢献の実装を開く必要があります。

Python からの使用例を以下に示します。

driver.set_network_conditions(
    offline=False,
    latency=5,  # additional latency (ms)
    download_throughput=500 * 1024,  # maximal throughput
    upload_throughput=500 * 1024)  # maximal throughput
于 2017-10-10T17:40:30.497 に答える
5

これは非常に歓迎され、便利な機能ですが、本格的なテストでは、ネットワーク シミュレーションの従来の方法がまだ有効であると思います。

すでにリンクされているソリューションに加えて、Charles Web プロキシ(非常に便利なツール - 商用) と Linux Traffic Control を使用した独自のレシピの実装 ( LAMPe2eの第 6 章を参照) の 2 つのソリューションを認識しています。

ブラウザではなくネットワーク接続に干渉することで、使用中のブラウザとは関係なく、影響を適切に測定できます。

Chrome の機能だけを使用したいのはなぜですか?

于 2015-01-24T23:31:04.963 に答える
3

以下の問題は、このコミットで修正されました

C# の世界にいる私のような人は、なぜアップロード/ダウンロードのスループットが期待どおりに機能しないのか疑問に思っていますが、これらのプロパティのツールチップのラベルが間違っているようです。ツールチップには、データ レートは kb/s で測定されると記載されていますが、私自身の経験では、実際には 1 秒あたりのバイト数であるため、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 のアップになることがわかります。

于 2021-05-10T16:09:32.920 に答える
1

TridentTrueからの回答に触発された、C# の Selenium 4.0.0 の更新バージョンを次に示します。バージョンを特定せずにalpha7以降で使用する方法を誰かが知っている場合は、これを自由に更新してください。:)

public void LimitNetwork(int latencyInMilliseconds, long downloadLimitMbps, long uploadLimitMbps)
{
    IDevTools devTools = driver as IDevTools;
    session = devTools.CreateDevToolsSession();

    EmulateNetworkConditionsCommandSettings command = new EmulateNetworkConditionsCommandSettings();

    command.Latency = latencyInMilliseconds;
    command.DownloadThroughput = downloadLimitMbps * 125000; // Mbps to bytes per second
    command.UploadThroughput = uploadLimitMbps * 125000; // Mbps to bytes per second
    command.Offline = false;

    session.Network.EmulateNetworkConditions(command);
}

どういうわけか、DevTools を開いている場合にのみ機能します。簡単な解決策は、Chrome でDevTools を自動的に開くことですが、現在、より良い解決策を探しています。

更新: これを自分用に実装した後、Selenium 4.0 の概要を理解するための非常に優れた記事を見つけました。

于 2022-02-09T13:47:28.913 に答える