概要

WebサイトまたはWebアプリケーションがアクセス元の場所に基づいて変化する場合、これらのすべての場所でWebサイトをテストすることが重要になります。Selenium 4でChrome DevToolsプロトコルサポートが利用できるようになったため、Nightwatchは、1つのコマンドだけでテスト実行中にブラウザのジオロケーションをモックすることをサポートしています。

これにより、単一の場所からテストしながら、異なる場所で提供されるWebサイトの異なるバージョンにアクセスしてテストできます。

このコマンドは、Google ChromeやMicrosoft EdgeなどのChromiumベースのブラウザでのみ機能します。

ジオロケーションのモック

ブラウザのジオロケーションをモックすることで、ブラウザからWebサイトに送信される場所をオーバーライドできるため、Webサイトはその場所で提供されることを意図したバージョンで応答できます。

必要なパラメーターを使用してWebサイトに移動する前にbrowser.setGeolocation()コマンドを呼び出すだけで、要求された場所 tarkoitettu Webサイトのバージョンが返されます。

setGeolocation()は、最初の引数としてオブジェクトを受け入れます。オブジェクトの仕様は次のとおりです。

キー タイプ デフォルト 説明
緯度 数値 設定するジオロケーションの緯度。
経度 数値 設定するジオロケーションの経度。
精度
オプション
数値 100 ジオロケーションのモック時の予想精度。

tests/mock-geolocation.js
describe('mock geolocation', function() {
  it('sets the geolocation to Tokyo, Japan', () => {
    browser
      .setGeolocation({
        latitude: 35.689487,
        longitude: 139.691706,
        accuracy: 100
      })
      .navigateTo('https://www.gps-coordinates.net/my-location')
      .pause(3000);
  });
});

ジオロケーションのリセット

ブラウザのジオロケーションをオーバーライドした後、同じテスト実行中にブラウザのジオロケーションを元の値にリセットする場合、今回は引数なしでbrowser.setGeolocation()コマンドを再度使用することで、これを行うことができます。

tests/mock-and-reset-geolocation.js
describe('mock and reset geolocation', function() {
  it('sets the geolocation to Tokyo, Japan and then resets it', () => {
    browser
      .setGeolocation({
        latitude: 35.689487,
        longitude: 139.691706,
        accuracy: 100
      })  // sets the geolocation to Tokyo, Japan
      .navigateTo('https://www.gps-coordinates.net/my-location')
      .pause(3000)
      .setGeolocation()  // resets the geolocation
      .navigateTo('https://www.gps-coordinates.net/my-location')
      .pause(3000);
  });
});