Selenium-WebDriver

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.窗口跳转到二个句柄


猜你喜欢

转载自blog.csdn.net/bpz31456/article/details/80612550
今日推荐