driver.navigate().back();     后退

driver.navigate().forward();   前进

driver.navigate().refresh();    刷新

driver.manage().window().maximize();   最大化

// 进入 id 叫frameA 的 iframe
dr.switchTo().frame("frameA");
// 回到主窗口
dr.switchTo().defaultContent();

Iframe操作

  1. 如果iframe标签有能够唯一确定的id或者name,就可以直接用id或者name的值:driver.switchTo().frame("aa");
  2. 如果iframe标签没有id或者name,但能够通过页面上确定其是第几个(也就是通过index来定位iframe,index是从0开始的):driver.switchTo().frame(0);
  3. 还可以通过xpath的方式来定位iframe,写法如下:
    1. WebElement iframe = driver.findElement(By.xpath("//iframe[@name='aa']"));
    2. 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中嵌套着呢,于是在网上搜了一下相关的定位方法。

    例如,现有HTML代码如下:
  1. main.html
  2. <</span>html>
  3. <</span>head>
  4. <</span>title>FrameTest</</span>title>
  5. </</span>head>
  6. <</span>body>
  7. <</span>div id = "id1">this is a div!</</span>div>
  8. <</span>iframe id = "frame1"  frameborder="0" scrolling="no" style="left:0;position:absolute;" src = "frame.html"></</span>iframe>
  9. </</span>body>
  10. </</span>html>
  11. frame.html
  12. <</span>html>
  13. <</span>head>
  14. <</span>title>this is a frame!</</span>title>
  15. </</span>head>
  16. <</span>body>
  17. <</span>div id = "div1">this is a div,too!</</span>div>
  18. <</span>label>input:</</span>label>
  19. <</span>input id = "input1"></</span>input>
  20. </</span>body>
  21. </</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提供了以下几个方法:

  1. getText : 返回alert/confirm/prompt中的文字内容
  2. accept : 点击确认按钮
  3. dismiss : 点击取消按钮如果有取消按钮的话
  4. 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的更多相关文章

  1. 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 ...

  2. 《手把手教你》系列技巧篇(二十六)-java+ selenium自动化测试-浏览器操作(详细教程)

    1.简介 在Web自动化的操作中,我们通常需要使用一些方法来操作浏览器,今天就来学习一下.这一篇宏哥主要是介绍一下,在自动化测试的时候,我们常见的一些浏览器操作有哪些,宏哥将会一一介绍和讲解. 2.浏 ...

  3. selenium 使用教程详解-java版本

    第一章 Selenium 概述 1.1.Selenium 发展史 ​ Selenium是一系列基于Web的自动化工具,提供一套测试函数,用于支持Web自动化测试.函数非常灵活,能够完成界面元素定位.窗 ...

  4. Selenium 设置浏览器下载 Firefox 和Chrome

    当我们在使用Selenium运行自动化测试时,偶尔需要用到下载功能,但浏览器的下载可能会弹出下载窗口,或者下载路径不是我们想要保存的位置,所以在通过Selenium启动浏览器时需要做相关的设置,将使这 ...

  5. 使用Python + Selenium打造浏览器爬虫

    Selenium 是一款强大的基于浏览器的开源自动化测试工具,最初由 Jason Huggins 于 2004 年在 ThoughtWorks 发起,它提供了一套简单易用的 API,模拟浏览器的各种操 ...

  6. 杂项-自动化测试工具:Selenium(浏览器自动化测试框架)

    ylbtech-杂项-自动化测试工具:Selenium(浏览器自动化测试框架) Selenium 是一个用于Web 应用程序测试的工具.Selenium 测试直接运行在浏览器中,就像真正的用户在操作一 ...

  7. 使用Selenium通过浏览器对网站进行自动化测试和相关问题

    使用Selenium通过浏览器对网站进行自动化测试 自动化测试概念: 一般是指软件测试的自动化,软件测试就是在预设条件下运行系统或应用程序,评估运行结果,预先条件应包括正常条件和异常条件. 广义上来讲 ...

  8. selenium原理应用 - 利用requests模拟selenium驱动浏览器

    前言 selenium是一个web自动化测试的开源框架,它支持多语言:python/java/c#… 前面也有一篇文章说明了,selenium+浏览器的环境搭建. selenium支持多语言,是因为s ...

  9. Selenium Chrome浏览器的启动以及proxy设置

    Selenium Chrome浏览器的启动以及proxy设置   虽然WebDriver对Firefox的支持最好,之前写的脚本也都在Firefox浏览器运行,但最近项目做了整合,发现新整合的功能不太 ...

随机推荐

  1. 【mysql 】sql删除重复记录 You can't specify target table '表名' for update in FROM clause

    用下面的语句就报语法出错: delete from tab_record where recordid not in (select  min(c.recordid) as recordid from ...

  2. 简短的perl程序

    简短的perl程序能够实现大功能.    perl是如何做到的呢?  1. 默认变量     如果没有向函数提供参数值,则默认参数为$_:     如果没有变量用于接收一个表达式的值,则默认接收变量为 ...

  3. MongoCola使用教程 1 - MongoDB的基本操作和聚合功能---Mongdb客户端软件操作说明

    前言 在开始正文之前,感谢博客园的Nosql爱好者对于MongoCola工具的试用(使用).特别感谢 呆呆 这位朋友的Bug报告,让我纠正了一个很严重的Bug.同时也感谢以前的多个网友在博客留言中给我 ...

  4. L126

    Like so many things, it is not what's outside, but what is inside that counts. 许多事物都是如此,外表看起來虽不起眼,但是 ...

  5. 《Drools7.0.0.Final规则引擎教程》第3章 3.1 Hello World 实例

    3.1 Hello World 实例 在上一章中介绍了Drools5x版本中规则引擎使用的实例,很明显在Drools7中KnowledgeBase类已经标注为"@Deprecated&quo ...

  6. 【MFC】MFC绘图不闪烁——双缓冲技术

    MFC绘图不闪烁——双缓冲技术[转] 2010-04-30 09:33:33|  分类: VC|举报|字号 订阅 [转自:http://blog.163.com/yuanlong_zheng@126/ ...

  7. 如何用 php 读取一个很大的 excel 文件。

    这个程序是用php 读取一个很大的excel文件, 先将 excel 文件保存成csv 文件, 然后利用 迭代器 逐行读取 excel 单元格的值, 拿到值以后 做相应处理,并打印结果. <?p ...

  8. SSH框架(1)

    一. SSH框架相关的面试题:   1.  BeanFactory的作用是什么?   [中] BeanFactory是配置.创建.管理bean的容器,有时候也称为bean上下文.Bean与bean的依 ...

  9. 洛谷 P3225 [HNOI2012]矿场搭建

    传送门 题目大意:建设几个出口,使得图上无论哪个点被破坏,都可以与出口联通. 题解:tarjian求割点 首先出口不能建在割点上,找出割点,图就被分成了几个联通块. 每个联通块,建出口.如果割点数为0 ...

  10. 如何用php+ajax实现页面的局部刷新?(转)

    client.html XML/HTML code   ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 <!DOCTYPE ...