【3. 测试 Chrome】
Chrome 虽然不是 Selenium 的原配,但是没办法,她太火辣了,不能抛下她不管的。
把 ExampleForFireFox.java 稍微修改可以制作出一个 ExampleForChrome.java ,直接把 new FireFoxDriver() 修改为 new ChromeDriver() 你会发现还是行不通。
错误如下:
1)Exception in thread "main" java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.chrome.driver system property; for more information, see http://code.google.com/p/selenium/wiki/ChromeDriver. The latest version can be downloaded from http://code.google.com/p/chromedriver/downloads/list
这应该是找不到 chrome 的文件,好吧,利用 System.setProperty 方法添加路径,这里要注意,是 “webdriver.chrome.driver” 可不是“webdriver.chrome.bin”
设置路径后还是会报错:
2)[6416:4580:1204/173852:ERROR:gpu_info_collector_win.cc(91)] Can't retrieve a valid WinSAT assessment.
这个貌似是因为 Selenium 无法直接启动 Chrome 导致的,必须要通过前面咱们下载 Chrome 的第三方插件 ChromeDriver,去看第一个错误中提示给你的 网址:http://code.google.com/p/selenium/wiki/ChromeDriver
按照人家给的例子来修改我们的测试代码吧:
01 packagelesson1;
02
03 importjava.io.File;
04 importjava.io.IOException;
05
06 importorg.openqa.selenium.By;
07 importorg.openqa.selenium.WebDriver;
08 importorg.openqa.selenium.WebElement;
09 importorg.openqa.selenium.chrome.ChromeDriverService;
10 importorg.openqa.selenium.remote.DesiredCapabilities;
11 importorg.openqa.selenium.remote.RemoteWebDriver;
12 importorg.openqa.selenium.support.ui.ExpectedCondition;
13 importorg.openqa.selenium.support.ui.WebDriverWait;
14
15 publicclassExampleForChrome {
16 publicstaticvoidmain(String[] args)throwsIOException {
17 // 设置 chrome 的路径
18 System.setProperty(
19 "webdriver.chrome.driver",
20 "C:\Documents and Settings\sq\Local Settings\Application Data\Google\Chrome\Application\chrome.exe");
21 // 创建一个 ChromeDriver 的接口,用于连接 Chrome
22 @SuppressWarnings("deprecation")
23 ChromeDriverService service =newChromeDriverService.Builder()
24 .usingChromeDriverExecutable(
25 newFile(
26 "E:\Selenium WebDriver\chromedriver_win_23.0.1240.0\chromedriver.exe"))
27 .usingAnyFreePort().build();
28 service.start();
29 // 创建一个 Chrome 的浏览器实例
30 WebDriver driver =newRemoteWebDriver(service.getUrl(),
31 DesiredCapabilities.chrome());
32
33 // 让浏览器访问 Baidu
34 driver.get("http://www.baidu.com");
35 // 用下面代码也可以实现
36 // driver.navigate().to("http://www.baidu.com");
37
38 // 获取 网页的 title
39 System.out.println("1 Page title is: "+ driver.getTitle());
40
41 // 通过 id 找到 input 的 DOM
42 WebElement element = driver.findElement(By.id("kw"));
43
44 // 输入关键字
45 element.sendKeys("zTree");
46
47 // 提交 input 所在的 form
48 element.submit();
49
50 // 通过判断 title 内容等待搜索页面加载完毕,间隔10秒
51 (newWebDriverWait(driver,10)).until(newExpectedCondition<Boolean>() {
52 publicBoolean apply(WebDriver d) {
53 returnd.getTitle().toLowerCase().endsWith("ztree");
54 }
55 });
56
57 // 显示搜索结果页面的 title
58 System.out.println("2 Page title is: "+ driver.getTitle());
59
60 // 关闭浏览器
61 driver.quit();
62 // 关闭 ChromeDriver 接口
63 service.stop();
64
65 }
66 }
运行一下看看,是不是一切OK了?
补充:仔细看了一下官网的介 绍:Chrome Driver is maintained / supported by the Chromium project iteslf. 看来如果使用 new ChromeDriver() 的话,应该要安装 Chromium 而不是 Chrome,我现在懒得折腾了,有兴趣的童鞋可以试验一下。