一、安装Selenium并在IDE中集成
此处使用edge浏览器,在微软商店Selenium,然后下载浏览器对应版本的webDriver驱动包
在idea中创建maven项目,pom文件引入selenium依赖
在创建的测试类中,定义一个打开浏览器的方法
System.setProperty是获取对应浏览器的驱动程序
创建对应的驱动对象,通过get方法输入域名,就会自动打开浏览器访问它。
二、Selenium基本使用
Selenium作为自动化测试框架,可以自动获取web页面的元素位置,然后模拟人进行点击操作。
这里有一些方法可以定位元素:
![](https://i-blog.csdnimg.cn/direct/6b03ea6bc9064466ad844338d2d3a1b2.png)
2.1 findElement:定位基本元素
尽量不使用tagName属性获取,用className,name获取的话,因为可能一个页面有同名存在,可能不会获取到正确的元素,建议使用id
也可以通过css选择器来获取元素:
** 根据id的话,需要额外添加 " # ",根据类名获取,额外添加 " . " **
edgeDriver.findElement(By.cssSelector("input[maxlength='255']")).sendKeys("csdn");
2.2 sendKeys:在获取的输入框中输入要输入的内容
edgeDriver.findElement(By.className("s_ipt")).sendKeys("阿里云");
2.3 click:模拟鼠标左键,比如搜索
edgeDriver.findElement(By.id("su")).click();
2.4 xpath:描述页面中元素位置的路径
xpath是xml文档格式,有绝对路径和相对路径之分,绝对路径就是从根标签<html>开始,比如 **/html/body/... ,但是这样的话,一旦位置变化,xpath也要修改**
** 相对路径:**
//input[@maxlength='100'] 这样是获取一个输入框,且属性中含有maxlength为100的元素
//a[text()='新闻']
//a[contains(text(),'新闻')]
2.5 clear:清除输入内容
edgeDriver.findElement(By.id("kw")).sendKeys("fankai");
Thread.sleep(3000);
edgeDriver.findElement(By.id("kw")).clear();
2.6 WebElement:元素对象
获取的元素对象可以用WebElement接收,然后使用里面的getXxx方法获取信息。
![](https://i-blog.csdnimg.cn/direct/b55191ee32dd4058ab34060176738a2b.png)
2.7 driver对象常用API
driver对象就是一开始获取的对应浏览器的驱动对象
![](https://i-blog.csdnimg.cn/direct/ccd492ee71374eb1a53ab617d2d402c1.png)
System.out.println("当前页面的URL:" + edgeDriver.getCurrentUrl()); //输出当前的url链接
System.out.println("当前页面的标题:" + edgeDriver.getTitle()); //输出当前的标题
System.out.println("当前页面的源代码:" + edgeDriver.getPageSource()); //输出当前页面源代码
close方法会关闭当前浏览器窗口,而exit方法不一样,会关闭所有窗口,和驱动
manage方法可以获得Options对象,通过Options对象的window方法获取浏览器窗口
window窗口对象可以获取对应的x,y轴大小,以及全屏,最大化显示窗口等等操作
//获取窗口对象
WebDriver.Window window = edgeDriver.manage().window();
window.fullscreen();
window.maximize();
window.getPosition()
2.7 导航栏对象 navigate
通过driver的navigate方法可以获得导航栏对象,导航栏可以通过to方法去往指定的url地址,也可以进行back方法返回上一页,forward方法去往下一页,refresh方法刷新网页
2.8 等待操作
等待是为了防止,代码执行速度太快,页面UI还为加载出来,就因为获取不到指定元素而报错。
硬等待:指的是线程的sleep方法,强制程序睡眠指定时间,容易浪费时间
隐等待:在设置的超时范围时间内不断获取元素,直至找到或超时,相对硬等待更灵活,但是针对全局
参数time:超时的时间值
参数unit:超时的时间单位,用枚举类型TimeUnit表示
显式等待:等待某个条件发生后在执行代码
//传入driver和过期时间
WebDriverWait wait = new WebDriverWait(edgeDriver,5);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("kw")));
2.9 弹框alert和comfirm
因为弹框不属于当前页面的元素,所以无法通过定位方式获取
只能通过findElement获取到绑定对应js的按钮
1.然后通过driver的switchTo方法下的alert方法,获得alert对象。
这样使用alert对象的accept方法或dismiss来关闭弹框,还可以使用getText方法获取弹框里的信息。
2.confirm也是通过alert方法获取的alert对象来操作确认框的,但是accept是确定,dismiss是取消,getText仍然是获取文本。
2.10 iframe切换 和 window切换
注意该切换是在不同的iframe标签中进行切换,不能切错了
当要操作另一个窗口的元素时,必须先切换窗口对应的句柄,再切换到对应的窗口
方法如下:打开b窗口,先获取所有句柄集合,然后循环,传入句柄,根据页面标题来判断切换的窗口是想要的窗口吗?是就退出循环
切换方式:
** driver.switchTo.window(nameOrHandle)**
** nameOrHandle指的是传入对应窗口的名称或句柄**
** 得到句柄的方法上文提到了**
2.11 select下拉框
如果元素应该是下拉框,我们就可以获取他并封装成应该select对象,从而调用底下的api
![](https://i-blog.csdnimg.cn/direct/2fe3ae7aa732461eaa97b68b307351de.png)
2.12 时间,日期控件
如果是readonly限制输入,可以定义应该js脚本,删除对应的readonly属性
JavascriptExecutor javascriptExecutor = (JavascriptExecutor) edgeDriver;
javascriptExecutor.executeScript("document.getElementById(\"train_date\").removeAttribute(\"readonly\")");
这里的train_date只是一个id,后面跟上转义字符 " \ "
然后就可以通过获得元素的格式来sendKey了
2.13 鼠标操作
2.14 文件上传
文件上传为input元素:
验证码:
版权归原作者 海色ha1se 所有, 如有侵权,请联系我们删除。