selenium 对浏览器的操控 java
driver.navigate().back(); 后退
driver.navigate().forward(); 前进
driver.navigate().refresh(); 刷新
driver.manage().window().maximize(); 最大化
// 进入 id 叫frameA 的 iframe
dr.switchTo().frame("frameA");
// 回到主窗口
dr.switchTo().defaultContent();
Iframe操作
- 如果iframe标签有能够唯一确定的id或者name,就可以直接用id或者name的值:driver.switchTo().frame("aa");
- 如果iframe标签没有id或者name,但能够通过页面上确定其是第几个(也就是通过index来定位iframe,index是从0开始的):driver.switchTo().frame(0);
- 还可以通过xpath的方式来定位iframe,写法如下:
- WebElement iframe = driver.findElement(By.xpath("//iframe[@name='aa']"));
- driver.switchTo().frame(iframe);


public void testIFrame(){
driver.findElement(By.id("user")).sendKeys("test");
driver.switchTo().frame("aa");
driver.findElement(By.id("user")).sendKeys("iframe test");
driver.switchTo().defaultContent();//返回顶层frame
driver.findElement(By.id("user")).sendKeys("---new test");
}
最近正在进行webdriver的web级自动化测试代码的编写,遇到一个问题:页面有三个标签,单击一个标签打开一页,要对第二个标签打开的页面进行定位操作,可是总是定位不到。查看一下代码,发现这个标签打开的是一个新页面,在iframe中嵌套着呢,于是在网上搜了一下相关的定位方法。
- main.html
- <</span>html>
- <</span>head>
- <</span>title>FrameTest</</span>title>
- </</span>head>
- <</span>body>
- <</span>div id = "id1">this is a div!</</span>div>
- <</span>iframe id = "frame1" frameborder="0" scrolling="no" style="left:0;position:absolute;" src = "frame.html"></</span>iframe>
- </</span>body>
- </</span>html>
- frame.html
- <</span>html>
- <</span>head>
- <</span>title>this is a frame!</</span>title>
- </</span>head>
- <</span>body>
- <</span>div id = "div1">this is a div,too!</</span>div>
- <</span>label>input:</</span>label>
- <</span>input id = "input1"></</span>input>
- </</span>body>
- </</span>html>
1.iFrame有ID 或者 name的情况
//进入id="frame1"的frame中,定位id="div1"的div和id="input1"的输入框。
dr.switchTo().frame("frame1");
dr.findElement(By.id("div1"));
dr.findElement(By.id("input1"))
2.如果一个iFrame既没有id,也没有name,通用情况
// 定位frame位置,并选取frame
WebElement frame=driver.findElement(By.xpath( "/html/body/div[2]/div[8]/div[2]/div[3]/div/div[2]/div/iframe" ));
driver.switchTo().frame(frame);
3.跳出iFrame
//跳出frame,进入default content;重新定位id="id1"的div
dr.switchTo().defaultContent();
dr.findElement(By.id("id1")
WebDriver中处理原生JS的 alert confirm 以及prompt是很方便的(虽然现在原生JS的实现方式用的很少了)。
具体思路是使用driver.switchTo.alert()方法,定位到当前的 alert/confirm/prompt(这里注意当前页面只能同时含有一个控件,如果多了会报错的,所以这就需要一一处理了),然后在调用Alert 的方法进行操作,Alert提供了以下几个方法:
- getText : 返回alert/confirm/prompt中的文字内容
- accept : 点击确认按钮
- dismiss : 点击取消按钮如果有取消按钮的话
- sendKeys : 向prompt中输入文字
//这个方法在chromedriver中不起作用,IE11的话也有点问题,现在很少用JS,所以就没去研究,以后用到了再研究吧
html文件
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>dialogs:alert,confirm,prompt</title>
</head>
<body>
<input id = "alert" value = "alert" type = "button" onclick = "alert('欢迎!请按确认继续!');"/>
<input id = "confirm" value = "confirm" type = "button" onclick = "confirm('确定吗?');"/>
<input id = "prompt" value = "prompt" type = "button" onclick = "var name = prompt('请输入你的名字:',''); document.write(name) "/>
</body>
</html>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
selenium代码
WebDriver driver = new FirefoxDriver();
driver.get("file:///D:/workSpaceIPaaS/selenium.web/src/main/java/webdrivers/dialogs.html");
// 点击弹出alert
driver.findElement(By.id("alert")).click();
Thread.sleep(3000);
//捕获alert
Alert alert= driver.switchTo().alert();
System.out.println("alert text: "+alert.getText());
//点击取消按钮|关闭
alert.dismiss();
Thread.sleep(3000);
//点击弹出confirm
driver.findElement(By.id("confirm")).click();
Thread.sleep(3000);
//捕获confirm
Alert confirm=driver.switchTo().alert();
System.out.println("confirm text: "+alert.getText());
//点击确认按钮
confirm.accept();
Thread.sleep(3000);
//点击弹出prompt
driver.findElement(By.id("prompt")).click();
Thread.sleep(3000);
//捕获prompt
Alert prompt=driver.switchTo().alert();
System.out.println("promp text: "+prompt.getText());
Thread.sleep(3000);
prompt.sendKeys("");
prompt.sendKeys("java");
Thread.sleep(3000);
prompt.accept();
driver.close();
driver.quit();
selenium 对浏览器的操控 java的更多相关文章
- selenium 打开浏览器报错java.lang.NoSuchMethodError: org.openqa.selenium.chrome.ChromeOptions.addArguments([Ljava/lang/String;)
java.lang.NoSuchMethodError: org.openqa.selenium.chrome.ChromeOptions.addArguments([Ljava/lang/Strin ...
- 《手把手教你》系列技巧篇(二十六)-java+ selenium自动化测试-浏览器操作(详细教程)
1.简介 在Web自动化的操作中,我们通常需要使用一些方法来操作浏览器,今天就来学习一下.这一篇宏哥主要是介绍一下,在自动化测试的时候,我们常见的一些浏览器操作有哪些,宏哥将会一一介绍和讲解. 2.浏 ...
- selenium 使用教程详解-java版本
第一章 Selenium 概述 1.1.Selenium 发展史 Selenium是一系列基于Web的自动化工具,提供一套测试函数,用于支持Web自动化测试.函数非常灵活,能够完成界面元素定位.窗 ...
- Selenium 设置浏览器下载 Firefox 和Chrome
当我们在使用Selenium运行自动化测试时,偶尔需要用到下载功能,但浏览器的下载可能会弹出下载窗口,或者下载路径不是我们想要保存的位置,所以在通过Selenium启动浏览器时需要做相关的设置,将使这 ...
- 使用Python + Selenium打造浏览器爬虫
Selenium 是一款强大的基于浏览器的开源自动化测试工具,最初由 Jason Huggins 于 2004 年在 ThoughtWorks 发起,它提供了一套简单易用的 API,模拟浏览器的各种操 ...
- 杂项-自动化测试工具:Selenium(浏览器自动化测试框架)
ylbtech-杂项-自动化测试工具:Selenium(浏览器自动化测试框架) Selenium 是一个用于Web 应用程序测试的工具.Selenium 测试直接运行在浏览器中,就像真正的用户在操作一 ...
- 使用Selenium通过浏览器对网站进行自动化测试和相关问题
使用Selenium通过浏览器对网站进行自动化测试 自动化测试概念: 一般是指软件测试的自动化,软件测试就是在预设条件下运行系统或应用程序,评估运行结果,预先条件应包括正常条件和异常条件. 广义上来讲 ...
- selenium原理应用 - 利用requests模拟selenium驱动浏览器
前言 selenium是一个web自动化测试的开源框架,它支持多语言:python/java/c#… 前面也有一篇文章说明了,selenium+浏览器的环境搭建. selenium支持多语言,是因为s ...
- Selenium Chrome浏览器的启动以及proxy设置
Selenium Chrome浏览器的启动以及proxy设置 虽然WebDriver对Firefox的支持最好,之前写的脚本也都在Firefox浏览器运行,但最近项目做了整合,发现新整合的功能不太 ...
随机推荐
- hdu 5980 Find Small A(水,模拟)
Find Small A Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- form表单的提交地址一定要是完整的绝对地址
<form action="<%=path%>/servlet/DologinServlet" =<form action="<%=requ ...
- 【网络】<网络是怎样连接的>笔记
[一] 浏览器 http://user:pwd@hosturl:port/dir/of/file 基本思路: 1.1 生成http请求信息 包含“对什么”“进行怎样的操作”两个方法.一般常用操作是GE ...
- 【SQL查询】查询列中使用条件逻辑_case when then end
select x.范围, count(*) from (select t.ename, case when t.sal <= 100 ...
- jQuery对象[0]倒底是什么?
s[0]倒底是什么?(s为jQuery对象)代码:var s=$("div"); alert(s.length);alert(s[0]); jQuery对象默认都有个0索引,s为j ...
- 2017年终巨献阿里、腾讯最新Java程序员面试题,准备好进BAT了吗
Java基础 进程和线程的区别: Java的并发.多线程.线程模型: 什么是线程池,如何使用? 数据一致性如何保证:Synchronized关键字,类锁,方法锁,重入锁: Java中实现多态的机制是什 ...
- Write operations are not allowed in read-only mode 只读模式下(FlushMode.NEVER/MANUAL)写操作不
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read ...
- WCF服务引用时错误: 无法导入 wsdl:portType详细信息
WCF服务发布到IIS后,在客户端或WCFTestClient添加引用的时候报错如下: 错误: 无法导入 wsdl:portType详细信息: 在运行 WSDL 导入扩展时引发异常: System.S ...
- rpm -Uvh 升级时的陷阱
问题现象 用rpm -Uvh升级后,原先的一个软链接被删除了,而采用先rpm -e 卸载rpm包,再rpm -ivh 安装包的方法,这个软链接还在.这个软链接是在rpm包安装的时候建立,也只有在rpm ...
- AVAWEB学习笔记 ---- 系列文章
[JAVAWEB学习笔记]网上商城实战5:后台的功能模块 [JAVAWEB学习笔记]网上商城实战4:订单模块 [JAVAWEB学习笔记]网上商城实战3:购物模块和订单模块 [JAVAWEB学习笔记]网 ...