一.使用环境 ecplise+jdk1.8+selenium+junit
- 下载安装导入环境 https://www.cnblogs.com/Nancy-Lee/p/10986324.html
- maven项目依赖
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.8.1</version>
</dependency>
3.下载安装对应的浏览器驱动文件,对应的浏览版本下载对应驱动版本文件
chrome驱动参考
https://jingyan.baidu.com/article/f7ff0bfcdd89ed2e27bb1379.html
//加载对应浏览器驱动方法
System.setProperty("webdriver.chrome.driver", "D:\\chromedriver\\chromedriver_win32\\chromedriver.exe");
二.selenium之元素定位
1.selenium有八中方法定位元素id,name,class name,link text,xpath,css selector,tag name ,partial link text
一般常用的是就是id 、name、xpath 。
id、name、class元素在页面input标签中可以看到 ,前端页面不规范可以没有对应值。
XPath定位元素的方法有很多中,这里介绍一种最简单粗暴的:
那就是利用浏览器调试功能,定位到元素所在的那一行右键–>Copy–>Copy XPath
三.selenium之事件操作
1.selenium最常用的事件
findElement(by.by).clear(); 清除定位元素内容,一般是操作文本、密码框等
findElement(by.by).sendKeys(); 输入内容,一般操作文本、密码框 等
findElement(by.by).click() ;通用点击事件
findElement(by.by).submit(); 提交事件 ,仅针对submit使用,button不能使用。
2.单选框
WebElement Radio =driver.findElement(By.id("id")); //定位到对应元素
Radio.click(); //直接点击
Radio.clear(); //清空单选
3.多选框
定位到对应选择的多选框的内容,直接点击选中
WebElement checkbox1 =driver.findElement(By.id("id_01"));//定位到元素
WebElement checkbox2 =driver.findElement(By.id("id_02"));
checkbox1.click(); //多选
checkbox2.click();
4.选择下拉框
下拉框选择 需要先new一个Select对象,然后对它进行操作
Select select= new Select(driver.findElement(By.id(" ")));
select.selectByVisibleText("内容");//对应选择框的内容。
5.页面跳转
一个页面对应一个句柄,页面之见相互切换,可以使用句柄进行跳转
使用getWindowHandle()获取到当前页面的句柄
getWindowHandles() 获取所用页面句柄返回的是set集合(无序),只能打开一个页面就去获取对应的句柄。
driver.switchTo().window(handle);//使用句柄相互跳转页面
一个页面有内嵌iframe 页面,直接使用findElement是不能定位到iframe 标签内的元素,需要使用switchto(),
跳转到iframe 内嵌的页面中,才能使用findElement 定位到对应的元素。
6.设置等待超时时间
设置默认超时时间 隐式等待 、显式等待、 sleep
隐式等待
manage().timeouts().implicitlyWait();
创建driver的时候直接全局申明等待时间。指定时间内不断刷新找到对应元素
显式等待 ,直接针对指定的元素 进行等待
sleep() 强制加载,直接中断了进程,阻断进程这样对于测试存在一点风险,不太建议使用
public void Chrome() {
System.setProperty("webdriver.chrome.driver", "D:\\chromedriver\\chromedriver_win32\\chromedriver.exe");
ChromeDriver driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.manage().window().maximize();
driver.get("https://www.baidu.com");
driver.findElementById("kw").sendKeys("username");
driver.findElement(By.id("su")).click();
System.out.println(driver.getWindowHandle());
四.selenium 静默访问
不用打开浏览器,直接在后台访问地址, 对网页操作。
new ChromeOptions().addArguments("–headless")
System.setProperty("webdriver.chrome.driver", "D:\\chromedriver\\chromdriver_win32_85\\chromedriver.exe");
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--headless");
WebDriver driver = new ChromeDriver(chromeOptions);
driver.get("http://www.baidu.com");
driver.findElement(By.id("kw")).sendKeys("天气");
driver.findElement(By.id("su")).click();
System.out.println(driver.getTitle());
driver.getCurrentUrl();
System.out.println(driver.getCurrentUrl());
五.无痕浏览
chromeOptions.addArguments(" --incognito");
// --incognito 无痕浏览 、--headless静默启动
浏览器不展示 “chrome正受到自动测试软件的控制”的信息 ,使用disable-infobars
不过谷歌新版本中该属性已经被废弃。不能再使用。可以使用下面的方法再去设置
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setExperimentalOption("excludeSwitches", new String[]{"enable-automation"});