一、操作日期选择框

QQ图片20161118215530.png1336x545 22.6 KB

说明:日期选择框大部分是不支持前端输入的,因为这个对象是 readOnly,只读属性,selenium提供了JavaScript执行器,对前台源代码进行操作,间接达到输入传值的目的;

(1)方式一:删除对象的readOnly属性,然后对输入框输入操作;

        /**
* 去掉日期选择框的只读属性:readOnly,然后对日期输入框输入值;
*/
public void selectDate01(){
//获取第一个日期选择框元素对象;
WebElement startTime = driver.findElement(By.id("txtStartDate"));
//获取第二个日期选择框元素对象;
WebElement endTime = driver.findElement(By.id("txtEndDate"));
//声明一个Js 执行器对象;
JavascriptExecutor js = (JavascriptExecutor) driver;
/**
* 目的:对两个日期输入框输入日期;
*/
js.executeScript("arguments[0].removeAttribute('readOnly');"
+ "arguments[1].removeAttribute('readOnly');", startTime,endTime);
//arguments[0] 代表第一个元素对象:startTime
//arguments[1] 代表第二个元素对象:endTime 、以此类推,元素个数没有限制,下标从0开始; //去掉两个对象的只读属性之后,就可以对输入框进行文本输入了;
startTime.sendKeys("2016-11-18");
endTime.sendKeys("2016-12-18");
}

(2)方式二:直接日期输入框赋值value

	/**
* 直接对日期输入框赋值:value
*/
public void selectDate03(){
//获取第一个日期选择框元素对象;
WebElement startTime = driver.findElement(By.id("txtStartDate"));
//获取第二个日期选择框元素对象;
WebElement endTime = driver.findElement(By.id("txtEndDate"));
//声明一个Js 执行器对象;
JavascriptExecutor js = (JavascriptExecutor) driver;
/**
* 目的:对两个日期输入框输入日期;
*/
js.executeScript("arguments[0].value='2016-11-18';"
+ "arguments[1].value='2016-12-18';", startTime,endTime);
}

二、对链接设置本页打开

QQ图片20161118221054.png1395x752 40.2 KB

说明:有的时候,我们点击一个链接,发现竟然打开了一个新窗口,这样就会涉及到多个页面来回切换,要使用到句柄的概念(后边在详细讲解: http://hordehome.com/t/selenium2-java-ui-17/1272 ),比较麻烦,而且容易出错。

原因:这个链接元素,有一个属性是target,当target值是 "blank" 时,是在新窗口打开,当target 值是 "self" 或者 没有target属性时,是在本窗口加载新页面,不打开新窗口。

QQ图片20161118221854.png1252x221 17.1 KB

所以,这就需要用到js执行器,对target属性进行操作。

(1)方式一:设置链接元素的target属性值为_self

	/**
* 更改target值为_self
*/
public void operatorTarget01(){
//获取链接元素对象;
WebElement link = driver.findElement(By.xpath("//a[text()='修改']"));
//声明一个Js 执行器对象;
JavascriptExecutor js = (JavascriptExecutor) driver;
/**
* 目的:更改链接元素的 target 属性为 _self;
*/
js.executeScript("arguments[0].setAttribute('target','_self');",link);
//点击链接元素
link.click();
}

(2)方式二:删除链接元素的target属性

	/**
* 删除链接元素的target 属性
*/
public void operatorTarget03(){
//获取链接元素对象;
WebElement link = driver.findElement(By.xpath("//a[text()='修改']"));
//声明一个Js 执行器对象;
JavascriptExecutor js = (JavascriptExecutor) driver;
/**
* 目的:删除链接元素的 target 属性;
*/
js.executeScript("arguments[0].removeAttribute('target');",link);
//点击链接元素
link.click();
}

基于Selenium2+Java的UI自动化(5) - 执行JavaScript脚本的更多相关文章

  1. 基于Selenium2+Java的UI自动化(4) - WebDriver API简单介绍

    1. 启动浏览器 前边有详细介绍启动三种浏览器的方式(IE.Chrome.Firefox): private WebDriver driver = null; private String chrom ...

  2. 基于Selenium2+Java的UI自动化(1) - 原理和环境搭建

    一.Selenium2的原理 Selenium1是thoughtworks公司的一个产品经理,为了解决重复烦躁的验收工作,写的一个自动化测试工具,其原理是用JS注入的方 式来模拟人工的操作,但是由于J ...

  3. 基于Selenium2+Java的UI自动化(8)- 显式等待和隐式等待

    一.隐式等待 package com.automation.waits; import java.util.concurrent.TimeUnit; import org.openqa.seleniu ...

  4. 基于Selenium2+Java的UI自动化(6)-操作Alert、confirm、prompt弹出框

    alert.confirm.prompt这样的js对话框在selenium1 时代处理起来比价麻烦,常常要用autoit来帮助处理.而现在webdriver对这些弹出框做了专门的处理,使用seleni ...

  5. 基于Selenium2+Java的UI自动化(2) - 启动浏览器

    一.准备工作 我们常用的浏览器主要有三个:chrome.Firefox.IE:其中chrome 和 IE 需要下载驱动程序,才能启动浏览器,注意驱动程序有32位和64位两种. 另外:如何查看本机的浏览 ...

  6. 基于Selenium2+Java的UI自动化(3) - 页面元素定位

    一.几种网页定位方式 webdriver的页面定位很灵活,提供了8种定位方式: 其中,常见的有三种:id .cssSelector .xpath: 一个元素如果存在 id 属性,则这个 id 的值,在 ...

  7. Java执行JavaScript脚本破解encodeInp()加密

    一:背景 在模拟登录某网站时遇到了用户名和密码被JS进行加密提交的问题,如图: 二:解决方法 1.我们首先需要获得该JS加密函数,一般如下: conwork.js var keyStr = " ...

  8. 在WebBrowser中执行javascript脚本的几种方法整理(execScript/InvokeScript/NavigateScript) 附完整源码

    [实例简介] 涵盖了几种常用的 webBrowser执行javascript的方法,详见示例截图以及代码 [实例截图] [核心代码] execScript方式: 1 2 3 4 5 6 7 8 9 1 ...

  9. Selenium执行JavaScript脚本

    JavaScript是运行在客户端(浏览器)和服务器端的脚本语言,允许将静态网页转换为交互式网页.可以通过 Python Selenium WebDriver 执行 JavaScript 语句,在We ...

随机推荐

  1. 转载JQuery 获取设置值,添加元素详解

    转载原地址 http://www.cnblogs.com/0201zcr/p/4782476.html jQuery 获取内容和属性 jQuery DOM 操作 jQuery 中非常重要的部分,就是操 ...

  2. HTTP Header 简介

    HTTP Header 简介 HTTP(HyperTextTransferProtocol)即超文本传输协议,目前网页传输的的通用协议.HTTP协议采用了请求/响应模型,浏览器或其他客户端发出请求,服 ...

  3. java应用CPU占用率过高问题的分析

    使用top查询哪个进程占用CPU过高 查看CPU占用高的进程中,哪个线程占用CPU高 可通过以下三种方式查看: 1 top中按SHIFT+H查找哪个线程占用高 2 top -H -p PID命令查看哪 ...

  4. Castle IOC容器快速入门

    主要内容 1.为什么要IOC 2.什么是Castle IOC容器 3.快速入门示例 4.几个重要的概念 一,为什么要IOC IOC(控制反转或者叫依赖注入)Martin Fowler大师在他的文章中已 ...

  5. EcTouch二次开发

    一.EcTouch简介 1.1. 什么是ECTOUCH ECTouch是上海商创网络科技有限公司推出的一款开源免费移动商城网店系统,可以在手机上面卖商品的电子商务软件系统.能够帮助企业和个人快速构建手 ...

  6. PostgreSQL的 initdb 源代码分析之二十二

    继续分析 load_plpgsql(); 展开: 就是让postgres 执行 create extension plpgsql cmd是: "/home/pgsql/project/bin ...

  7. skyline TerraBuilder 制作MPT方法与技巧(1)

    MPT是skyline独有的三维地形数据格式,可简单理解为 影像图+高程=三维地形(三维底图),以下介绍用skyline TerraBuilder(以下简称TB)制作MPT的方法与技巧 用TB制作MP ...

  8. Cocos2d-x 让精灵随手指移动起来二(简单实现)

    void HelloWorld::ccTouchMoved(cocos2d::CCTouch *touch, cocos2d::CCEvent *event) { CCSize winSize = C ...

  9. Android如何判断一个应用在运行

    在一个应用中,或一个Service .Receiver中有时候需要判断一个应用是否正在运行,以便进行一些相关的处理,这个时候我们需要得到一个ActivityManager,这个Manager顾名思意就 ...

  10. Codeforces Gym 100523C C - Will It Stop? 水题

    C - Will It Stop?Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/ ...