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