zoukankan      html  css  js  c++  java
  • 基于Selenium2+Java的UI自动化(5)

    一、操作日期选择框

    说明:日期选择框大部分是不支持前端输入的,因为这个对象是 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);
    	}

    二、对链接设置本页打开

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

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

    所以,这就需要用到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();
    	}
  • 相关阅读:
    Sql Server 2012 数据库同步方式 (发布、订阅)
    博客搬家通知
    无聊而又劳累的一天
    有没有大神知道国产加密算法SM2的详细介绍
    Android开发环境搭建helloworld程序创建(新手)
    debian下安装东西,遇到两个东西,记录下
    算法:扑克牌相关的一个简单功能示意(纯C实现)
    [51单片机学习笔记FIVE]----独立按键
    [51单片机学习笔记FOUR]----16*16LED点阵
    [51单片机学习笔记THREE]----继电器
  • 原文地址:https://www.cnblogs.com/hordehome/p/6264034.html
Copyright © 2011-2022 走看看