概述

当您的网站或 Web 应用程序根据访问它的位置进行更改时,为所有这些位置测试您的网站变得很重要。随着 Chrome DevTools 协议支持 现在在 Selenium 4 中可用,Nightwatch 支持在测试运行期间仅用一个命令模拟浏览器的地理位置。

这将允许您访问和测试在不同位置提供的网站的不同版本,同时从单个位置进行测试。

此命令仅适用于基于 Chromium 的浏览器,如 Google Chrome 和 Microsoft Egde。

模拟地理位置

模拟浏览器的地理位置允许您覆盖浏览器发送到网站的位置,以便您的网站可以响应以在该位置提供的版本。

您只需在导航到网站之前使用所需参数调用 browser.setGeolocation() 命令,您将收到为请求位置提供的网站版本。

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);
  });
});