Selenium GitHub地址

选择合适的WebDrvier

WebDriver是一个接口,它有几种实现,分别是HtmlUnitDrvier、FirefoxDriver、InternetExplorerDriver、ChromeDriver、OperaDriver,除了 InternetExplorerDriver只能在Windows平台运行,其他WebDriver均能跨平台。

如果追求运行速度,HtmlUnitDriver是首选,但是它没有运行界面,不能实时看到运行效果。如果想看到运行效果,可以使用FirefoxDrvier,它会真正打开浏览器,在屏幕上运行,因此我们可以监测页面元素的位置、CSS的值等,但是代价就是速度慢。

这里为了简单,使用 HtmlUnitDriver.

WebDriver driver = new HtmlUnitDriver();

导航

有了WebDriver实例,第一件事情就是打开页面。一般的做法是调用get方法:

driver.get("http://www.yeetrack.com");

WebDriver会一直等待,直到页面加载完毕(也就是”onload”方法释放)。

和页面进行交互

仅仅打开页面还不够,我们需要的是在页面上进行操作,进一步讲就是要操作页面中的html元素,如:

<input type="text" name="passwd" id="passwd-id" />

要操作页面元素,首先要定位元素,可以通过多种方法定位,如下:

WebElement element;
element = driver.findElement(By.id("passwd-id"));
element = driver.findElement(By.name("passwd"));
element = driver.findElement(By.xpath("//input[@id='passwd-id']"));

定位元素时,有两点要注意。通过text的值来定位一个Link时,text必须精确匹配;通过xpath来定位元素时,如果匹配到多条,只会返回第一条结果,如果没有匹配到,会抛NoSuchElementException异常。

WebDriver拥有”Object-baseed” API,我们可以使用WebElement来表示所有的页面元素。WebElement类有很多操作元素的方法,但是有些方法可能对当前元素无效,不用担 心,WebDriver会尽力帮我们处理。如,对一个”meta”标签元素,我们调用了WebElement的”SetSelected()”方 法,WebDriver会抛出异常。

我们定位到一个Element,接下来,我们可能要进行一些操作,如想键入一些字符:

element.sendKeys("sone text");

当然,我们也可以通过”Keys”这个类,来模拟键盘输入:

element.sendKeys(" and some", Keys.ARROW_DOWN);

记住,我们向这些元素输入的字符串,它们不会自动清空,也就是说调用”sendKeys()”方法,就是向元素中追加字符串。如果要清空一个input标签或者textarea:

element.clear();

填写表单

已经知道了如何键入字符串,那么其他元素呢?如checkboxes,如何选中;”OPTION”标签,如何设置”setSelected()”。下面是处理Select标签的例子:

WebElement select = driver.findElement(By.xpath("//select"));
List<WebElement> allOptions = select.findElements(By.tagName("option"));
for(WebElement option : allOptions)
{
System.out.println(String.format("Value is " %s, option.getAttribute("value")));
option.click();
}

上面的代码,首先定位一个Select元素,然后获取它下面的所有option,并且打印出来,执行一个click操作。明显,如果想选中某个选 中,这种方法不是最佳选择。其实WebDrvier定义了Select类,它提供一些更快捷的方式, 如”selectByIndex()”、”selectByValue()”。

表单填写完毕,然后就是提交,我们可以通过点击提交按钮,进行提交。

driver.findElement(By.id("submit")).click();

或者,WebElement提供”submit()”这个方法,如果当前元素处在form表单中,调用该元素的submit方法,WebDriver就会自动提交这个表单;如果不处于form表单中,会抛出”NoSuchElementException”异常。

element.submit();

拖放

WebDriver允许我们拖放元素,如将某个元素拖到其他地方、或者将某个元素拖到其他元素上。

WebElement element = driver.findElement(By.name("source"));
WebElement element = driver.findElement(By.name("target"));
(new Actions(driver)).dragAndDrop(element, target).perform();

切换window或者Frame

对于现在的web应用程序来说,很少有单个window的情况,都是嵌入了其他的frame。WebDrvier支持使用”switchTO”方法切换到其他window。

driver.switchTo().window.("windowName");

上面的代码执行后,driver就会切换到windowName这个window。但是如何获取windowName呢?来一个例子:

<a href="http://www.yeetrack.com" target="windowName">点击打开新窗口</a>

还有,我们可以通过”window handle”来切换,并且还可以遍历当前所有的window

for(String handle : driver.getWindowHandles())
{
driver.switchTo().window(handle);
}

切换frame(或者iframe)

driver.switchTo().frame("frameName");

switchTo()可以链式调用,或者通过index来切换

drvier.switchTo().frame("frameName")
.switchTo().frame(0)
.switchTo().frame("child");

上面的语句执行后,driver会进入”frameName”这个frame,然后进入到第一个子frame,然后再进入到这个子frame的名称是”child”的frame中。如果要回到顶级的frame,执行下面的代码:

driver.switchTo().defaultContent();

导航:History和Location

早先,我们使用WebDriver的get方法,打开了”http://www.yeetrack.com”。WebDriver提供一些接口,其中一个如下:

driver.navigate().to("http://www.yeetrack.com");

“navigate().to()”和”get()”方法,实现的功能完全一样,只不过”get()”拼写起来更简单。

“navigete”接口,还可以控制浏览器的前进和后退:

driver.navigate().forward();
driver.navigate().back();

请注意,这个功能完全依赖于底层的浏览器。如果两种浏览器的行为不一致,那么代码执行的效果也会不一致。

Cookies

浏览器的安全测试,cookie是不能跨域的,所以你想操作A域名的cookie,首先你要让切换到A域名上。

//打开域名
driver.get("http://www.yeetrack.com"); //添加Cookie
Cookie cookie = new Cookie("uuid", "abcdedfjeiajfei");
driver.manage().addCookie(cookie); //遍历当前域名的cookie
Set(Cookie) allCookies = driver.manage().getCookies();
for(Cookie loadedCookie : allCookies)
{
System.out.println(String.format("%s ---> %s", loadedCookie.getName(), loadedCookie.getValue()));
}

转自: Selenium WebDriver高级用法

Selenium WebDriver高级用法的更多相关文章

  1. Selenium webdriver 高级应用

    对于这一段还蛮有感慨的,只想说,代码还是需要自己去敲的. 1. 改变用户代理 import org.junit.AfterClass; import org.junit.BeforeClass; im ...

  2. Selenium WebDriver高级应用

    WebDriver高级应用 public class Demo4 { WebDriver driver; // @BeforeMethod:在每个测试方法开始运行前执行 @BeforeMethod p ...

  3. selenium webdriver从安装到使用(python语言),显示等待和隐性等待用法,切换窗口或者frame,弹框处理,下拉菜单处理,模拟鼠标键盘操作等

    selenium的用法 selenium2.0主要包含selenium IDE 和selenium webDriver,IDE有点类似QTP和LoadRunner的录制功能,就是firefox浏览器的 ...

  4. Selenium webdriver Java 高级应用

    对于这一段还蛮有感慨的,只想说,代码还是需要自己去敲的. 1. 改变用户代理 import org.junit.AfterClass; import org.junit.BeforeClass; im ...

  5. Python3 Selenium自动化web测试 ==> 第八节 WebDriver高级应用 -- 结束Windows中浏览器的进程

    学习目的: 掌握WebDriver的高级应用 正式步骤: # -*- coding:utf-8 -*- from selenium import webdriver from selenium.web ...

  6. Python3 Selenium自动化web测试 ==> 第七节 WebDriver高级应用 -- 浮动框中,单击选择某个关键字选项

    学习目的: 了解WebDriver的高级应用 正式步骤: 测试Python3代码 # -*- coding:utf-8 -*- from selenium import webdriver from ...

  7. selenium高级用法

    http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp# WebDriver: Advanced Usage Explicit and Im ...

  8. Python3 Selenium自动化web测试 ==> 第十一节 WebDriver高级应用 -- 显示等待 + 二次封装

    学习目的: 掌握显示等待 掌握二次封装 正式步骤: step1:显示等待的代码示例 # -*- coding:utf-8 -*- from selenium import webdriver from ...

  9. Python3 Selenium自动化web测试 ==> 第九节 WebDriver高级应用 -- 操作select 和 alert

    学习目的: 掌握页面常规元素的定位方法 场景: 网页正常的select元素下拉框常规方法和select专属方法 正式步骤: step1:常规思路select页面元素定位 处理HTML代码截图 # -* ...

随机推荐

  1. 小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载二(生命周期)

    4.1 什么是生命周期 想要真正地理解PhoneGap应用开发的内涵,首先需要理解什么是生命周期.这在字面上其实非常容易理解,一个应用从开始运行被手机加载到应用被退出之间的过程就称之为一个生命周期.为 ...

  2. delphi win7 and high path

    Close DelphiLocate bordbk120N.dll (C:\Program Files (x86)\CodeGear\RAD Studio\6.0\bin)Make a backup ...

  3. [HDU5360]:Gorgeous Sequence(小清新线段树)

    题目传送门 题目描述: (原题英文) 操作0:输入l,r,t,线段树区间与t取min. 操作1:输入l,r,区间取最大值. 操作2:输入l,r,区间求和. 输入格式: 第一行一个整数T,表示数据组数: ...

  4. 51nod——1174 区间中最大的数(ST)

    题目链接 给出一个有N个数的序列,编号0 - N - 1.进行Q次查询,查询编号i至j的所有数中,最大的数是多少. 例如: 1 7 6 3 1.i = 1, j = 3,对应的数为7 6 3,最大的数 ...

  5. str.format输出乱码

    如该示例,str.Format(L"相似度:%f\t视频名称:%s\t起始位置:%d\r\n",tmp[0].dblSimilarity,tmp[0].szFileName,tmp ...

  6. linux内核数据结构

    https://blog.csdn.net/zhangskd/article/details/11225301 在看ip_acct.c相关代码时看到大量使用了 hlist_nulls_for_each ...

  7. laravel 设计思想简单了解

    服务容器 laravel框架中 服务容器是整个系统功能调度配置的核心,在系统运行过程中动态的为系统提供需要的服务 从而实现了解耦 控制反转(IOC) 控制反转是一种设计模式 主要解决了系统组件之间的相 ...

  8. python-数字类型内置方法

    数字类型内置方法 为什么要有数据类型? 数据是用来表示状态的,不同的状态就应该用不同的数据类型去表示 整型(int) 用途:年龄.号码.银行卡号等 定义:可以使用int()方法将纯数字的字符串转换为十 ...

  9. WIN10配置instantclient

    在PLSQL Developer目录下建立如下bat文件,替换其快捷方式,启动PLSQL Developer: @echo off set path=C:\instantclient-basic-nt ...

  10. PAT Basic 1068

    1068 万绿丛中一点红 对于计算机而言,颜色不过是像素点对应的一个 24 位的数值.现给定一幅分辨率为 M×N 的画,要求你找出万绿丛中的一点红,即有独一无二颜色的那个像素点,并且该点的颜色与其周围 ...