org.openqa.selenium.WebDriver 接口
常用api
//打开一个链接
void get(String var1);
//跳转桃下一个窗口
WebDriver.TargetLocator switchTo();
//驱动器管理,主要包括当前窗口最大化,请求是否超时控制,得到cookies或清楚cookies等
WebDriver.Options manage();
//窗口句柄,可以理解为每个窗口一个唯一的入口或标记
String getWindowHandle();
//在当前窗口中查找多个元素,比如<ul>标签下的多个<li>标签,可以直接一次拿出
List<WebElement> findElements(By var1);
//在当前窗口中查找一个元素
WebElement findElement(By var1);
org.openqa.selenium.By 类
常用方法
//通过选择器选择页面元素
public static By cssSelector(String selector){...}
//通过Xpath找到页面元素
public static By xpath(String xpathExpression) {...}
org.openqa.selenium.WebElement 接口
常用api
//一个点击事件
void click();
//在input依次输入值
void sendKeys(CharSequence... var1);
//在当前窗口中查找多个元素,在一个WebElement,继续查找其他的WebElement,构成链式操作,很方便
List<WebElement> findElements(By var1);
//在当前窗口中查找一个元素,在一个WebElement,继续查找其他的WebElement,构成链式操作,很方便
WebElement findElement(By var1);
//动作类型,能够做鼠标移动到具体的元素上(WebElement),双击,点击和拖拽等等
org.openqa.selenium.interactions.Actions 类
常用方法
//移动到某个元素上,经常用到,鼠标悬停在某标签上,触发新的事件
public Actions moveToElement(WebElement target) {...}
//双击
public Actions doubleClick(WebElement target) {...}
演示:查找某个并点击某个元素
package cn.baopz.driver;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
* 演示webDriver
* 1.自动录入文字
* 2.点击演示
* 3.元素查找
* 4.窗口切换
*/
public class WebDriverTest {
private static String url = "https://www.baidu.com";
private static final String downloadPath = "C:\\download";
private List<String> handles = new ArrayList<>();
public static void main(String[] args) {
WebDriverTest webDriverTest = new WebDriverTest();
WebDriver webDriver = new ChromeDriver(webDriverTest.iniChromeOptions(downloadPath));
//1.打开并访问连接url
webDriver.get(url);
//2.查找相应输入框,输入文字
webDriver.findElement(By.cssSelector("#kw")).sendKeys("hello word");
//停顿三秒看看效果
try {
TimeUnit.SECONDS.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
//3.查找提交按钮,并点击
webDriver.findElement(By.cssSelector("#su")).click();
//停顿三秒看看效果
try {
TimeUnit.SECONDS.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
//4.选择其中某一条信息点击查阅
webDriver.findElement(By.cssSelector("#\\34 > h3 > a")).click();
//停顿三秒看看效果
try {
TimeUnit.SECONDS.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
//5.页面已经发生跳转,但是当前的driver还停留在之前的Handle(句柄)上,所以这里需要控制driver跳转到新出来的页面句柄上。
//这里涉及到需要控制句柄
//句柄控制,添加句柄后,一共有两个句柄
webDriverTest.addHandle(webDriver);
//6.句柄切换
webDriver.switchTo().window(webDriverTest.handles.get(1));
//在第二个窗口中查找元素并点击
webDriver.findElement(By.cssSelector("#courseindex > div:nth-child(2) > ul > li:nth-child(1) > a")).click();
//停顿三秒看看效果
try {
TimeUnit.SECONDS.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
//退出quit
webDriver.quit();
}
/**
* 句柄添加控制
* @param driver
*/
private void addHandle(WebDriver driver) {
Set<String> hs = driver.getWindowHandles();
for (String handle : hs) {
if (handles.contains(handle)) {
continue;
}
handles.add(handle);
}
//清空所以为空数据
handles.removeAll(Collections.singleton(null));
}
/**
* chrome初始化参数设置
*
* @param downloadPath
* @return
*/
private ChromeOptions iniChromeOptions(String downloadPath) {
System.setProperty("webdriver.chrome.driver", "D:\\env\\dcm\\2.37\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
//消除弹框,主要用于文件下载
chromePrefs.put("profile.default_content_settings.popups", 0);
//禁止图片加载
//chromePrefs.put("profile.managed_default_content_settings.images", 2);
chromePrefs.put("download.default_directory", downloadPath);
//对于实验性质的选项
options.setExperimentalOption("prefs", chromePrefs);
//消除安全校验,其实是MIX混合模式,就是在同一个driver中可以访问http,也能访问https
options.addArguments("--allow-running-insecure-content");
//最大化
options.addArguments("--ash-enable-fullscreen-app-list");
//启动最大化,防止失去焦点
options.addArguments("--start-maximized");
//关闭gpu图片渲染
options.addArguments("--disable-gpu");
//无界面浏览器
// options.setHeadless(true);
//user-agent 设置 profile.general_useragent_override
//webDriver错误弹框,同意,貌似没啥用
//options.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR, UnexpectedAlertBehaviour.ACCEPT);
return options;
}
}
演示图片效果
1.分析页面
2.效果
2.1录入 helloword
2.2点击“百度一下”
2.3选择某个连接点击进入
2.4.窗口跳转到二个句柄