webdriver 是直接操作浏览器的原生组件,所以搭建测试环境时通常都需要先下载浏览器对应的 webdriver,webdriver 的版本要和浏览器相对应
谷歌浏览器和对应 webdriver 版本:(chrome v60+ChromeDriverv2.28)
火狐浏览器和对应 geckodriver 版本:(geckodriver v0.17.0(32 位), firefox v53.0.3)
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-chrome-driver</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-firefox-driver</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.11</version>
</dependency>
</dependencies>
package selenium;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import java.util.concurrent.TimeUnit;
public class test {
public WebDriver driver;
@Test
public void main(){
driver.navigate().to("http://www.baidu.com");
String title = driver.getTitle();
System.out.println("Page title:"+ title);
Assert.assertTrue(title.equalsIgnoreCase("百度一下,你就知道"), "Page title don't match!");
driver.findElement(By.id("kw")).sendKeys(new String[] {"selenium"});//找到kw元素的id,然后输入hello
driver.manage().timeouts().implicitlyWait(8, TimeUnit.SECONDS);
driver.findElement(By.id("su")).click(); //点击按扭
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}
@BeforeClass
public void openChrome(){
// cherome driver
System.setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe");
ChromeOptions chromeOptions = new ChromeOptions();
// 设置为 headless 模式 (无头浏览器)
chromeOptions.addArguments("--headless");
driver = new ChromeDriver(chromeOptions);
driver.manage().window().maximize();
//设置隐性等待时间
driver.manage().timeouts().implicitlyWait(8, TimeUnit.SECONDS);
}
@BeforeClass
public void openFirefox(){
// firefox driver
System.setProperty("webdriver.firefox.bin", "C:\\Program Files\\Mozilla Firefox\\firefox.exe");
System.setProperty("webdriver.gecko.driver", "C:\\Program Files\\Mozilla Firefox\\geckodriver.exe");
//如果你使用firefox版本低于48,例如我之前用firefox esr 45版本,就这个代码就好报错,有机会你可以试试。如果真要低于48版本的火狐上运行geckodirver.exe,那么你的代码就要使用以下这一行代码。
// System.setProperty("webdriver.firefox.marionette","C:\\Program Files\\Mozilla Firefox\\geckodriver.exe");
driver = new FirefoxDriver();
driver.manage().window().maximize();
//设置隐性等待时间
driver.manage().timeouts().implicitlyWait(8, TimeUnit.SECONDS);
}
@AfterClass
public void afterMethod(){
driver.quit();
}
}
学习 selenium 的过程中,老大建议我去看下 chrome headless(无头浏览器)。
什么叫无头浏览器呢?
无头浏览器就是一个没有界面的浏览器,运行过程中看不到运行的界面。
优点:
1.执行速度更快
2.减少外界的干扰,记得之前用 selenium 执行自动化打开网页操作,如果电脑中途弹出什么窗口,会导致整个浏览器崩掉卡死,会影响后面的操作无法继续
3.简化测试执行环境的搭建
4.在单机环境实现测试的并发执行
缺点:1.不能完全模拟用户的操作,由于没有实际页面完整的布局渲染,不太适用于页面布局验证的场景
参考链接:https://www.cnbeta.com/articles/soft/603969.htm
https://www.cnblogs.com/stevenx/p/7375983.html
https://github.com/mozilla/geckodriver/releases
https://time.geekbang.org/column/article/12401