将人为驱动的测试行为转化为机器执行的过程。
一、推荐使用 Chrome 浏览器。先查看浏览器版本:
二、因为我的版本是 127 的,所以需要去这个地方下载:下载链接
三、把压缩包解压后把 chromedriver.exe 复制到:
① Chrome 浏览器目录下:
② Java - jdk 的 bin 目录下:
四、创建 Java Maven 项目,引入 pom.xml 依赖
- <dependencies>
-
- <dependency>
- <groupId>org.seleniumhq.seleniumgroupId>
- <artifactId>selenium-javaartifactId>
- <version>3.141.59version>
- dependency>
- dependencies>
五、创建一个 Java 类,验证环境是否配置成功:
- import org.openqa.selenium.WebDriver;
- import org.openqa.selenium.chrome.ChromeDriver;
- import org.openqa.selenium.chrome.ChromeOptions;
-
- public class Test {
- public static void main(String[] args) {
- ChromeOptions options = new ChromeOptions();
- options.addArguments("--remote-allow-origins=*"); // 允许所有的请求
- WebDriver webDriver = new ChromeDriver(options);
- webDriver.get("https://www.baidu.com"); // 打开百度首页
- }
- }
findElement:css 选择
- // 选中百度搜索框
- WebElement element = webDriver.findElement(By.cssSelector("#kw"));
xpath 选择
- // 选中百度搜索框
- WebElement element = webDriver.findElement(By.xpath("//*[@id=\"kw\"]"));
- // 往搜索框输入内容
- element.sendKeys("奥运会");
- // 找到 百度一下 按钮,然后点击
- webDriver.findElement(By.cssSelector("#su")).click();
- // 清空输入框
- webDriver.findElement(By.cssSelector(".s_ipt")).clear();
- // 硬等三秒
- sleep(3000);
-
- // 隐式等待,如果发现了要找的元素就停止等待,到时间了还没找到就报错
- webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.HOURS);
打印 title / url:
- String url = webDriver.getCurrentUrl();
- String title = webDriver.getTitle();
- if (url.equals("https://www.baidu.com/") && title.equals("百度一下,你就知道")) {
- System.out.println("测试成功");
- } else {
- System.out.println("测试失败");
- }
- // 浏览器后退
- sleep(3000);
- webDriver.navigate().back();
- // 浏览器刷新
- webDriver.navigate().refresh();
- // 浏览器前进
- sleep(3000);
- webDriver.navigate().forward();
- // 将浏览器的滚动条滚到最下面
- sleep(3000);
- ((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000");
- // 把浏览器设置全屏
- sleep(3000);
- webDriver.manage().window().fullscreen();
- // 把浏览器设置最大化(还有 X 这些)
- sleep(3000);
- webDriver.manage().window().maximize();
- // 把浏览器设置成自定义大小
- sleep(3000);
- webDriver.manage().window().setSize(new Dimension(600, 1000));
- // control + A
- sleep(3000);
- webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "A");
- // control + X
- sleep(3000);
- webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "X");
- // control + V
- sleep(3000);
- webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL, "V");
- // 找到图片按钮
- sleep(3000);
- WebElement webElement = webDriver.findElement(By.cssSelector("#s_tab > div > a.s-tab-item.s-tab-item_1CwH-.s-tab-pic_p4Uej.s-tab-pic"));
- // 鼠标右击
- Actions actions = new Actions(webDriver);
- sleep(3000);
- // moveToElement 表示移动到哪个元素上, perform 表示把点击后的效果显示出来
- actions.moveToElement(webElement).contextClick().perform();
- // 鼠标双击
- actions.moveToElement(webElement).doubleClick().perform();
- // 鼠标拖动
- actions.moveToElement(webElement).dragAndDrop().perform();
假设一个页面上有单选框和复选框,目前只点击所有的复选框:
- // findElements 获取的是一组元素
- List
webElements = webDriver.findElements(By.cssSelector("input")); - for (WebElement webElement : webElements) {
- // 通过 getAttribute 获取元素上的 type 值是否为 checkbox,如果是就点击
- if (webElement.getAttribute("type").equals("checkbox")) {
- webElement.click();
- }
- }
有 frame 的时候:
- webDriver.switchTo().frame("f1"); // 如果没有这一行直接执行下一行是找不到的,把当前定位的主体切换了frame里。
- webDriver.findElement(By.cssSelector("body > div > a")).click();