[跟着官方文档学Selenium][学习笔记][三][WebDriver入门指南]
WebDriver以本地化方式驱动浏览器,就像用户在本地或使用Selenium服务器的远程机器上所做的那样,这标志着浏览器自动化的飞跃。
Selenium WebDriver指的是语言绑定和各个浏览器控制代码的实现。通常称为WebDriver。
Selenium WebDriver是W3C推荐标准
- WebDriver被设计成一个简单和简洁的编程接口
- WebDriver是一个简洁的面向对象API
- 它能有效驱动浏览器
Selenium通过使用WebDriver支持市场上所有主流浏览器的自动化。WebDriver是一个API和协议,它定义了一个语言中立的接口,用于控制Web浏览器的行为。每个浏览器都有一个特定的WebDriver实现,称为驱动程序。驱动程序是负责委派给浏览器的组件,并处理与Selenium和浏览器之间的通信。
这种分离是有意识地努力让浏览器供应商为其浏览器的实现负责的一部分。Selenium在可能的情况下使用这些第三方驱动程序,但在这些驱动程序不存在的时候,也提供了由项目自己维护的驱动程序。
Selenium框架通过一个面向用户的界面将所有这些部分连接在一起,该界面允许透明地使用不同的浏览器后端,从而实现跨浏览器和跨平台自动化。
Selenium设置与其他商业工具的设置完全不同。要在自动化项目中使用Selenium,需要为每种语言安装语言绑定库。此外,对于要自动运行并运行测试的浏览器,需要WebDriver的执行文件。
安装Selenium分为三个步骤:
- 为你选择的编程语言安装Selenium类库
- 配置浏览器驱动以驱动你的浏览器(如msedgedriver用于Edge浏览器)
- (可选)设置和配置Selenium Grid用于拓展测试
安装类库
首先,为自动化项目安装Selenium绑定库。
这里以Java为例,新建Maven项目,在pom.xml
中添加selenium-java
依赖项
<dependencies>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.1.2</version>
</dependency>
</dependencies>
selenium-java
依赖项支持在所有Selenium支持的浏览器中运行自动化项目。如果只想在特定的浏览器中进行测试,可以在pom.xml
文件中添加该浏览器的依赖项。例如,只想在Edge上运行测试,可以添加以下依赖项:
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-edge-driver -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-edge-driver</artifactId>
<version>4.1.2</version>
</dependency>
安装驱动
通过WebDriver,Selenium支持市场上所有主流浏览器(Chrome、Firefox、Internet Explorer、Edge、Opera和Safari),WebDriver尽量使用浏览器内置的自动化支持 来驱动浏览器。
由于除IE浏览器之外的所有驱动程序实现都是由浏览器供应商自己提供的,因此标准Selenium发行版不包括驱动程序
快速参考
浏览器 | 支持的操作系统 | 维护者 |
---|---|---|
Chromium/Chrome | Windows/macOS/Linux | |
Firefox | Windows/macOS/Linux | Mozilla |
Edge | Windows/macOS | Microsoft |
Internet Explorer | Windows | Selenium Project |
Safari | macOS High Sierra and newer | Apple |
使用驱动的三种方式
- 驱动管理软件
大多数机器都会自动更新浏览器,但驱动程序不会。为了确保为浏览器提供正确的驱动程序,这里以Java语言为例
//导入WebDriver Manager
import io.github.bonigarcia.wdm.WebDriverManager;
//调用setup()方法来设置正确的浏览器驱动
WebDriverManager.edgedriver().setup();
//初始化驱动
WebDriver driver = new EdgeDriver();
- PATH环境变量
此选项首先需要手动下载驱动程序,是一个灵活的选项,可以在不更新代码的情况下更改驱动程序的位置,并且可以在多台机器上工作,而不需要每台机器将驱动程序放在同一位置。
可以将驱动程序放置在路径中已列出的目录中,也可以将其放置在目录中并将其添加到PATH中
//要查看PATH上有哪些目录,打开命令提示符输入
echo %PATH%
//如果还没有进入PATH路径中,可以输入如下指令添加到PATH中
setx PATH "%PATH%;C:\WebDriver\bin"
//可以在命令行输入WebDriver名字验证是否成功添加PATH
chromedriver.exe
//如果PATH配置正确,将看到一些与驱动程序启动相关的输出
Starting MSEdgeDriver 99.0.1150.36 (c438621746b2932668109129d137a7e3a22ef4fd) on port 9515
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping MSEdgeDriver safe.
MSEdgeDriver was started successfully.
- 硬编码位置
需要手动下载驱动程序,跟方式2类似。在代码中指定位置本身的优点是不需要指出系统上的环境变量,但缺点是使代码的灵活性大大降低。
System.setProperty("webdriver.chrome.driver","/path/to/chromedriver");
ChromeDriver driver = new ChromeDriver();
打开浏览器
当完成了Selenium类库安装和驱动配置后,现在就可以使用浏览器启动和停止会话。
通常,浏览器都是根据特定的选项启动,这些选项描述浏览器必须支持哪些功能,以及浏览器在会话期间应该如何运行。有些功能是所有浏览器共享,有些功能特定于所使用的浏览器。这里以Edge浏览器为实例。微软Edge浏览器使用Chromium实现的,msedgedriver的主要版本号必须与Edge浏览器的主要版本匹配。
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.edge.EdgeOptions;
public class OpenBrowser
{
public static void main(String[] args)
{
WebDriver webDriver;
EdgeOptions options = new EdgeOptions();
webDriver = new EdgeDriver(options);
webDriver.quit();
System.out.println("成功打开并退出了Edge浏览器");
}
}
第一个脚本
当能够运用Selenium启动关闭浏览器时就可以编写第一个Selenium脚本
Selenium的8个基本组件
Selenium所做的一切,就是给浏览器发送指令,用以执行某些操作或为信息发送请求。
- 是用驱动实例开启会话
WebDriver webDriver = new EdgeDriver();
- 在浏览器执行操作(打开一个网页)
webDriver.get("https://www.baidu.com");
- 请求浏览器信息(获取标签名称)
webDriver.getTitle();//百度一下,你就知道
- 等待时间(设置浏览器延时)
webDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(4));
- 发送指令查找元素
WebElement searchButton = webDriver.findElement(By.id("su"));
WebElement searchBox = webDriver.findElement(By.name("wd"));
- 操作元素
searchBox.sendKeys("Selenium");
searchButton.click();
- 获取元素信息
searchBox = webDriver.findElement(By.name("wd"));
String searchValue = searchBox.getAttribute("value");
System.out.println(searchValue);//Selenium
- 结束会话
webDriver.quit();
完整例子:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.edge.EdgeDriver;
import java.time.Duration;
public class FirstScript
{
public static void main(String[] args)
{
WebDriver webDriver = new EdgeDriver();
webDriver.get("https://www.baidu.com/");
String title = webDriver.getTitle();
System.out.println(title);
webDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(4));
WebElement searchButton = webDriver.findElement(By.id("su"));
WebElement searchBox = webDriver.findElement(By.name("wd"));
searchBox.sendKeys("Selenium");
searchButton.click();
searchBox = webDriver.findElement(By.name("wd"));
String searchValue = searchBox.getAttribute("value");
System.out.println(searchValue);//Selenium
webDriver.quit();
}
}
- 点赞
- 收藏
- 关注作者
评论(0)