java js执行器_基于Selenium2+Java的UI自动化(5) - 执行JavaScript脚本

一、操作日期选择框

L3Byb3h5L2h0dHAvaG9yZGVob21lLmNvbS91cGxvYWRzL2RlZmF1bHQvb3B0aW1pemVkLzJYLzcvNzI4MjliNDZiYWNiMDMxMjA1ZDYyMDIyMzkwNmEzZjc3Njc5NmU0Ml8xXzY5MHgyODEucG5n.jpg

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);

}

二、对链接设置本页打开

L3Byb3h5L2h0dHAvaG9yZGVob21lLmNvbS91cGxvYWRzL2RlZmF1bHQvb3B0aW1pemVkLzJYL2IvYjljMzAyYWU3N2MwMDRmMDU0MWQwZDBjMWMyMDg2OGQ4MTIxZmU0MF8xXzY5MHgzNzEucG5n.jpg

QQ图片20161118221054.png1395x752 40.2 KB

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

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

L3Byb3h5L2h0dHAvaG9yZGVob21lLmNvbS91cGxvYWRzL2RlZmF1bHQvb3B0aW1pemVkLzJYLzUvNWYzNTA3YjYxNDgzZDNiMDJkZGU3ODJlZDBlOTc3MTgyYTQ1OTc5MF8xXzY5MHgxMjEucG5n.jpg

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();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值