Selenium 简明教程
Selenium WebDriver - Browser Options
浏览器选项是指所有浏览器共享的功能。在任何浏览器上运行自动化测试时,它有助于修改浏览器的设置和功能。默认情况下,Selenium Webdriver 从全新浏览器配置文件开始,对于 cookie、历史记录等没有任何预定义设置。
Adding Extensions to Browser
让我们举一个例子,它使用 * ChromeOptions* 类使用 Selenium IDE 扩展启动 Chrome 浏览器。每个 Chrome 扩展都应该有一个 .crx 文件。此处,将获取 Selenium IDE Chrome 扩展的 .crx 文件并将其存储在项目中的 Resourcs 文件夹中。
Example
package org.example;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.io.File;
import java.util.concurrent.TimeUnit;
public class ChromeOptns {
public static void main(String[] args) throws InterruptedException {
// object of ChromeOptions class
ChromeOptions opt = new ChromeOptions();
// adding .crx extension
opt.addExtensions(new File("./Resources/SeleniumIDE.crx"));
// Initiate the Chrome Webdriver
WebDriver driver = new ChromeDriver(opt);
// adding implicit wait of 10 secs
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
// Opening the webpage with Selenium IDE extension
driver.get("https://www.tutorialspoint.com/selenium/practice/register.php");
}
}
Process finished with exit code 0
此处,观察到 Chrome 浏览器已使用 Selenium IDE 扩展启动,同时还显示了信息栏 Chrome is being controlled by automated test software 。
最后,收到了消息 Process finished with exit code 0 ,表示代码成功执行。
Open Browser in Headless Mode
在此示例中,将使用 * EdgeOptions* 类在 headless 浏览器中启动应用程序。
package org.example;
import org.openqa.selenium.*;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.edge.EdgeOptions;
import java.io.File;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class EdgeHeadless {
public static void main(String[] args) throws InterruptedException {
// object of EdgeOptions
FirefoxOptions opt = new EdgeOptions();
// browser in headless mode
opt.addArguments("--headless=new");
// Initiate the Webdriver
WebDriver driver = new EdgeDriver(opt);
// adding implicit wait of 10 secs
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
// Opening the webpage with headless mode
driver.get("https://www.tutorialspoint.com/selenium/practice/selenium_automation_practice.php");
// getting page title
System.out.println("Getting the page title: " + driver.getTitle());
// Quit browser
driver.quit();
}
}
它将显示以下输出 −
Getting the page title: Selenium Practice - Student Registration Form
在上述示例中,观察到 Edge 浏览器在 * headless* 模式中启动。我们还获取了带有控制台消息的浏览器标题 - Getting the page title: Selenium Practice - Student Registration Form 。
Create Profiles in Browser
让我们看另一个示例,它使用 * FirefoxOptions* 类在浏览器上获取 Firefox 配置文件。
package org.example;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.firefox.ProfilesIni;
import java.util.concurrent.TimeUnit;
public class FirefoxProfile {
public static void main(String[] args) throws InterruptedException {
// object of FirefoxOptions class
FirefoxOptions opt = new FirefoxOptions();
// object of ProfilesIni
ProfilesIni prof = new ProfilesIni();
// get profile
FirefoxProfile p = prof.getProfile("<profileName>");
opt.setProfile(p);
// Initiate the Webdriver
WebDriver driver = new FirefoxDriver(opt);
// adding implicit wait of 20 secs
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
// Opening the webpage
driver.get("https://www.tutorialspoint.com/selenium/practice/selenium_automation_practice.php");
// obtain page title
System.out.println("Obtain the page title: " + driver.getTitle());
// Quit browser
driver.quit();
}
}
它将显示以下输出 −
Obtain the page title: Selenium Practice - Student Registration Form
此处,Firefox 浏览器使用创建的配置文件打开。我们还获取了带有控制台消息的浏览器标题 - Obtain the page title: Selenium Practice - Student Registration Form 。
Handle SSL Certificate Errors in Edge
为了克服 Edge 浏览器中的 SSL 证书错误,将使用 EdgeOptions 和 DesiredCapabilities 类。
package org.example;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.EdgeDriver;
import org.openqa.selenium.firefox.EdgeOptions;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.util.concurrent.TimeUnit;
public class SSLEdge {
public static void main(String[] args) throws InterruptedException {
// object of Desired Capabilities class
DesiredCapabilities dc = new DesiredCapabilities();
dc.setCapability(CapabilityType.ACCEPT_INSECURE_CERTS, true);
// object Edge Options class
EdgeOptionsOptions opt = new EdgeOptions();
opt.merge(dc);
// Initiate the Webdriver along with options
WebDriver driver = new EdgeDriver(opt);
// adding implicit wait of 5 secs
driver.manage().timeouts().implicitlyWait(55, TimeUnit.SECONDS);
// launch application with SSL certificate error
driver.get("https://expired.badssl.com");
// get browser title
System.out.println("Get Browser title in Edge: " + driver.getTitle());
// quit the browser
driver.quit();
}
}
它将显示以下输出 −
Get Browser title in Edge: Privacy error
此处,消除了 Edge 中的 SSL 证书错误并启动了应用程序。然后获取带有控制台消息的浏览器标题 - Browser title in Edge: Privacy error 。
Page Loading Strategy
浏览器中有可用的多种页面加载策略,它们是 NORMAL(浏览器中的默认页面加载设置)、EAGER 和 NONE。
package org.example;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
public class ChromePageLoadNormal {
public static void main(String[] args) throws InterruptedException {
// object of ChromeOptions
ChromeOptions opt = new ChromeOptions();
// setting pageloadStrategy to normal
opt.setPageLoadStrategy(PageLoadStrategy.NORMAL);
// Initiate the Webdriver
WebDriver driver = new ChromeDriver(opt);
// Opening the webpage
driver.get("https://www.tutorialspoint.com/selenium/practice/register.php");
// quit browser
driver.quit();
}
}
它将显示以下输出 −
Process finished with exit code 0
上述示例已将浏览器选项设置为将页面加载策略设置为 NORMAL。如果需要设置页面加载策略为 EAGER,则必须进行以下代码更改 −
// object of ChromeOptions
ChromeOptions opt = new ChromeOptions();
// setting pageloadStrategy to EAGER
opt.setPageLoadStrategy(PageLoadStrategy.EAGER);
// Initiate the Webdriver
WebDriver driver = new ChromeDriver(opt);
如果需要设置页面加载策略为 NONE,则必须进行以下代码更改 −
// object of ChromeOptions
ChromeOptions opt = new ChromeOptions();
// setting pageloadStrategy to NONE
opt.setPageLoadStrategy(PageLoadStrategy.NONE);
// Initiate the Webdriver
WebDriver driver = new ChromeDriver(opt);