[Selenium] HTML5 中的 Geolocation

在 HTML5 ,新特性 Geolocation 用於定位用戶位置信息。css

因爲用戶位置信息是敏感信息,因此須要獲得用戶容許後,才能讓程序經過 API  獲取當前用戶信息。WebDriver 程序每次從新容許都是新的會話進程,及時以前在瀏覽器中已經經過手工方式運行瀏覽器訪問用戶的位置信息,但在當前運行環境中依舊沒法獲取以前用戶設置。解決方法是讓瀏覽器每次執行 WebDriver 測試程序時,依舊加載以前用戶設置便可。html

以Firefox 爲例,在Mac OS 平臺上,可經過以下命令打開用戶 Profile 管理器html5

$ /Applications/Firefox.app/Contents/MacOS/firefox-bin -ProfileManagerjson

其餘平臺打開方式查詢官方開發者文檔:瀏覽器

https://developer.mozilla.org/en-US/docs/Mozilla/Multiple_Firefox_Profilesapp

建立 geolocation Profile 成功後,單擊 Start Firefox 啓動 Firefox 瀏覽器。測試

 

以 http://www.weschools.com/html/html5_geolocation.asp 爲例。爲演示完整的示例代碼,還需建立一個包含 Geolocation 信息的 JSON 文件,這裏命名爲 location.json,內容以下:ui

{firefox

  "status":"OK",code

  "accuracy":10.0,

  "location":{"lat":52.1771129, "lng":5.4}

}

示例:

package com.learningselenium.html5;

 

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.firefox.FirefoxDriver;

import org.openqa.selenium.firefox.FirefoxProfile;

import org.openqa.selenium.firefox.internal.Profileslni;

import  org.testng.annotations.*;

 

public class testHTML5Geolocation{

  private static WebDriver driver;

 

  @BeforeClass

  public void setUp() throws Exception{

    //獲取geolocation Profile

    FirefoxProfile profile = new Profileslni().getProfile("geolocation");

    //配置Geolocation 信息

    profile.setPreference("geo.wifi.uri", "/Selenium 2/mydoc/codes/4/location.json");

    //經過定製 profile 啓動瀏覽器

    driver = new FirefoxDriver(profile);

    driver.get("http://www.weschools.com/html/html5_geolocation.asp");

  }

 

  @Test

  public void testGetLocation() throws Exception{

    driver.findElement(By.cssSelector("p#demo button")).click();

  }

 

  @AfterClass

  public void tearDown() throws Exception{

    driver.quit();

  }

}

相關文章
相關標籤/搜索