`
fangyinhui
  • 浏览: 13786 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

webdriver2

 
阅读更多

Selenium2.0之WebDriver学习总结(2)  

来自lvzeting   2012-03-05 16:12:08|  分类: 自动化测试|字号 订阅

 
 

(三)   命令和操作

这一部分将介绍一下WebDriver的一些具体操作和命令,实际操作中,我们需要两大工具来帮助我们:FireBugXpath工具,这两者都是Firefox上的插件。接下来我们所讲解的都是以FirefoxDriver为基础的,且基于WebDriver driver = new FirefoxDriver();创建的一个driver实例:

a)         访问一个页面

第一件你想使用WebDriver做的事情肯定是访问一个页面,最基础的方法是调用“get”方法:

 

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

同样我们可以使用:

 

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

WebDriver会自动等待到该页面完全加载才执行接下来的测试和脚本的执行。但是如果你的页面存在很多的AJAX加载,此时WebDriver是无法知道是否完成加载。检查此类页面是否加载完成,那么我们就需要ExplicitImplicit Wait(这两个将在后面文章解释)。

 

b)         定位UI元素

WebDriver可以通过WebDriver实例来定位元素,任何语言库都含有“Find Element”和“Find Elements”的方法。第一个方法返回一个WebElement或者抛出异常。后者返回所有WebElement的列表,或者空列表。

获取和定位元素我们调用“By”方法。下面具体解释下“By”方法:

By ID

这是一个极为有效定位元素的方法。普遍的现状是UI工程师在实际编写页面时很少写id或者自动生产一个ID,这些都是需要避免的。对于一个页面Element来说,class比自动生产的id更好。

通过id定位元素的例子:

<div id="coolestWidgetEvah">...</div>

WebElement element = driver.findElement(By.id("coolestWidgetEvah"));


 By Class Name

        这里的class指的是DOM中的元素,在实际使用过程中,我们也会发现很多DOM元素含有相同的class名。

通过class name定位元素例子:

 

 

 

<div class="cheese">

<span>Cheddar</span>

</div>

<div class="cheese">

<span>Gouda</span>

</div>

List<WebElement> cheeses = driver.findElements(By.className("cheese"));


 

By Tag Name

DOMTag元素

Tag name 定位元素的例子:

<iframe src="..."></iframe>

WebElement frame = driver.findElement(By.tagName("iframe"));


By Name

例子:

<input name="cheese" type="text"/>

WebElement cheese = driver.findElement(By.name("cheese"));


By Link Text

例子:

 

 

 

<a href="http://www.google.com/search?q=cheese">cheese</a>>

WebElement cheese = driver.findElement(By.linkText("cheese"));

 

By Partial Link Text

根据链接的部分文字

例子:

 

<a href="http://www.google.com/search?q=cheese">search for cheese</a>>

WebElement cheese = driver.findElement(By.partialLinkText("cheese"));


By CSS

从名字上看,这是根据CSS来定位元素。

例子:

 

<div id="food">

         <span class="dairy">milk</span>

         <span class="dairy aged">cheese</span>

</div>

WebElement cheese = driver.findElement(By.cssSelector("#food span.dairy aged"));

 

 

By XPATH

在高级的水平下,WebDriver尽可能使用浏览器的原生的XPath能力。在那些没有原生的XPath支持的浏览器,我们提供自己的实现方式。但是三个Driver有一定的区别。Selenium2.0之WebDriver学习总结(2) - 网易杭州QA - 网易杭州 QA Team

 

例子:

<inputtype="text"name="example"/>

<INPUT type="text" name="other" />

List<WebElement> inputs = driver.findElements(By.xpath("//input")); 

查找结果:

 

HTML元素有时并不需明确声明,因为他们将默认为已知值的属性。例如,input标签,就不需要设置typetext,默认属性就是text,经验原则:WebDriver在使用中的XPath时,不应该期望能够对这些隐含属性相匹配。

 

Selenium2.0之WebDriver学习总结(2) - 网易杭州QA - 网易杭州 QA Team
 

使用javascript

您可以执行任意JavaScript找到一个元素,只要你返回一个DOM元素,它会自动转换到一个WebElement对象。

例子:

jQuery的页面加载一个简单的例子:

 

WebElement element = (WebElement) ((JavascriptExecutor)driver).executeScript("return $('.cheese')[0]"); 

寻求所有的页面上的input元素:

 

List<WebElement> labels = driver.findElements(By.tagName("label"));

List<WebElement> inputs = (List<WebElement>) ((JavascriptExecutor)driver).executeScript(

    "var labels = arguments[0], inputs = []; for (var i=0; i < labels.length; i++){" +

"inputs.push(document.getElementById(labels[i].getAttribute('for'))); } return inputs;", labels);

 

用户表单填充

例子:

遍历select标签

 

WebElement select = driver.findElement(By.tagName("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 select = new Select(driver.findElement(By.tagName("select")));

select.deselectAll();

select.selectByVisibleText("Edam");

上传文件:

WebElement FileUpload =driver.findElement(By.id("upload"));

String filePath = "C:\test\\uploadfile\\media_ads\\test.jpg";

FileUpload.sendKeys(filePath);

 

提交:

Submitform

 

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


submit不在form

 

WebElement.submit();

 

 

拖拽操作:

 

WebElement element = driver.findElement(By.name("source"));

WebElement target = driver.findElement(By.name("target"));

(new Actions(driver)).dragAndDrop(element, target).perform();


 

 

 

 

WindowsFrames之间的切换

一些web应用程序有许多Frames或多个Windows WebDriver支持使用“switchTo”的方法实现的窗口之间切换。

 

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

所有对driver的调用都会指向特定的窗口,但是我们怎么知道窗口的名字呢?我们可以查看javascript代码和打开他的链接:

 

<a href="somewhere.html" target="windowName">Click here to open a new window</a>

另外,还可以通过“window handle”去调用“switchTo().window()”,通过这个,我们就遍历来找到所有打开的窗口:

 

for (String handle : driver.getWindowHandles()) {

driver.switchTo().window(handle);

}

 

Switch同样支持frame

 

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

同样可以使用他访问subframe,找frameName的第一个subframe中叫做childframe

 

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

 

弹出框:

selenium2.0开始,已经支持对弹出框的获取

 

Alert alert = driver.switchTo().alert();

这个方法会返回当前被打开打警告框,你可以进行统一,取消,读取提示内容,后则进入到提示,这个同样使用alertsconfirmsprompts

 

NavigationHistory and Location

之前我们就可以通过get方法来打开一个网页,像我们所看到的,WebDriver同样还有许多小接口,Navigation就是其中一个小接口:

 

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

navigate().toget()其实作用是一样的,但是navigate还可以进行浏览器的前进后退操作:

 

driver.navigate().forward();

driver.navigate().back(); 

分享到:
评论

相关推荐

    selenium webdriver2 环境搭建

    ### Selenium WebDriver2 环境搭建详解 #### 一、概述 Selenium WebDriver 是一个用于自动化Web应用测试的工具,它直接与浏览器交互,并且能够模拟真实用户的操作。WebDriver2 版本相比于早期版本有着更好的稳定性...

    selenium webdriver2 一个完整demo.docx

    ### Selenium WebDriver2 完整示例解析 #### 环境搭建与准备工作 根据文档提供的信息,本示例主要介绍了如何使用Selenium WebDriver2.0进行自动化测试的完整流程。首先,我们需要完成以下准备工作: 1. **下载...

    WebDriver实验版VB6版WebDriver实验,压缩包中有技术文档《WebDriver原理及实验》

    2. **WebDriver的优势**:WebDriver相比传统的记录回放工具,如Selenium RC,提供了更底层的浏览器控制,能够实现更精确的测试。它支持多种浏览器和操作系统,并且允许实时获取页面元素的状态,增强了测试的灵活性和...

    webdriver API中文版

    2. **使用 WebDriver 打开浏览器**:通过调用 WebDriver 的相应方法,如 `FirefoxDriver()` 或 `ChromeDriver()`,可以启动指定的浏览器实例。 3. **打开测试页面**:利用 `get()` 方法,可以将浏览器导航到指定的...

    Chrome浏览器和版本配套webdriver 114

    2. 配置政策文件:创建一个组策略对象(GPO),并设置相应的配置项来阻止Chrome自动更新。 3. 使用命令行启动Chrome:在启动Chrome时添加`--disable-update`或`--no-first-run`参数,这可以临时阻止自动更新。 4. ...

    webdriver模拟火狐firefox浏览器

    2. GeckoDriver:Firefox从版本48开始引入了新的渲染引擎Gecko,相应的,WebDriver需要使用GeckoDriver作为中间件来通信。GeckoDriver是一个服务器,它接收来自WebDriver的命令,并将其转发给Firefox浏览器。 3. ...

    WebDriver

    WebDriver 是一个用于自动化浏览器操作的接口,它是Web测试领域中的一个重要工具。WebDriver允许开发者编写脚本,模拟用户在浏览器上的各种交互行为,如点击、输入、导航等,从而实现对Web应用的功能验证和性能测试...

    php-webdriver-bindings.rar_php-webdriver

    2. **全面支持**:库支持所有支持 Webdriver 的浏览器,包括 Chrome、Firefox、Safari 和 Edge 等。这使得测试可以在多种浏览器环境下运行,确保应用的兼容性。 3. **灵活性**:你可以选择本地运行测试,或者利用...

    Python库 | webdriver_manager-1.5.1-py2.py3-none-any.whl

    这个压缩包文件`webdriver_manager-1.5.1-py2.py3-none-any.whl`包含了适用于Python 2和3版本的库,无需用户手动下载或配置WebDriver的特定版本。 `webdriver_manager`库的核心功能在于简化了Selenium WebDriver的...

    WebDriver命令参考手册

    WebDriver 命令参考手册 WebDriver 命令参考手册是 WebDriver 的一个重要组件,提供了 WebDriver 的命令参考手册。该手册详细介绍了 WebDriver 的各种命令和协议,旨在帮助开发者更好地理解和使用 WebDriver。 ...

    selenium2 webdriver中文文档完整

    Selenium2 WebDriver 中文文档完整 Selenium2 WebDriver 是一个流行的自动化测试工具,用于模拟用户交互来测试Web应用程序。本文档将详细介绍 Selenium2 WebDriver 的安装、配置、基本操作和使用技巧。 安装 ...

    Selenium WebDriver 所需jar包

    2. **浏览器驱动**:每个浏览器都需要一个特定的驱动程序(如ChromeDriver、GeckoDriver、IEDriverServer)来支持WebDriver。这些驱动是桥接程序,使WebDriver能够与浏览器通信。压缩包中的jar可能包含了一些常见...

    WebDriver(Chrome、IE、Edge、FireFox)

    2. **IE WebDriver**,也称为IEDriverServer,是为Internet Explorer浏览器设计的。由于IE的市场份额逐渐下降,它的使用相对较少,但仍然在某些企业环境中很重要。设置IE Driver时,需要确保安装了正确的版本(32位...

    ChromeWebdriver-win64

    ChromeWebdriver-win64是一个专为Windows平台设计的自动化测试工具,主要用于驱动Google Chrome浏览器进行自动化操作。在软件开发和测试领域,Selenium是一个广泛使用的Web应用程序自动化框架,而ChromeDriver则是...

    webdriver的chromedriver.exe

    WebDriver是一种开源的自动化测试框架,它允许程序员通过编程方式控制Web浏览器进行自动化操作,例如点击按钮、填写表单、导航等。在IT行业中,WebDriver被广泛应用于软件测试,特别是Web应用的端到端测试,以及数据...

    Selenium WebDriver实战宝典(吴晓华)

    全书共分为四个部分:第1部分基础篇主要讲解自动化测试相关的基础理论、WebDriver 环境安装、单元测试工具的使用方法以及 WebDrvier的入门使用实例,第2部分实战应用篇基于丰富的实战案例讲解页面元素的定位方法以及...

    IE Webdriver (Python)

    2. **兼容性问题**:确保 IE 和 WebDriver 版本匹配。 3. **代理设置**:如果网络需要通过代理,需要在 WebDriver 中配置代理设置。 4. **安全设置**:可能需要在 IE 的“安全”和“隐私”设置中调整以允许自动化。 ...

Global site tag (gtag.js) - Google Analytics