Java+Selenium WebDriver 元素操作(五)

 

一、WebDriver API简单元素操作

定位元素之后,需要对元素进行操作,WebDriver中最常用的几个方法如下

(1)、clear()

清除文本输入框的内容

driver.findElement(By.id("idInput")).clear();                //清空输入框内容

登录框内一般会默认有“账号”等提示信息,如果直接向输入框中输入数据,则会和输入框的信息拼接,从而造成输入信息错误,这个时候就可以使用clear()方法来清除输入框中的默认提示信息

(2)、sendKeys(value)

模拟键盘向输入框里输入内容

driver.findElement(By.id("idInput")).sendKeys("username");   //向输入框输入内容

(3)click() 单击元素

click() 方法可以用来单击一个元素,前提是他是一个被单击的对象(图片/文字链接,复选框,单选框,下拉框等)

driver.findElement(By.id("loginBtn")).click();               //点击登录按钮

(4)submit()方法用于提交表单

有时候submit()和click()方法是可以互换来使用,submit()也可以提交一个按钮,但是submit()的应用范围远不及click

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

(5)getSize() 返回元素的尺寸

getSize 方法用于获取百度输入框的宽、高

WebElement size = driver.findElement(By.id("kw"));     //获得百度输入框的尺寸
System.out.println(size.getSize());

(6)getText() 获取元素的文本

getText 方法用于获得百度底部的备案信息

WebElement text = driver.findElement(By.id("cp"));     //返回百度页面底部备案信息
System.out.println(text.getText());

(7)getAttribute(name) 获得属性值

getAttribute()用于获得百度输入的 type 属性的值

WebElement ty = driver.findElement(By.id("kw"));       //返回元素的属性值,可以是 id、name、type 或元素拥有的其它任意属性
System.out.println(ty.getAttribute("type"));

getAttribute(“innerHTML”):DOM对象的属性,不是元素标签的属性。

比如度首页的设置标签a,取值是a标签的子标签,包括html里面的代码,就是设置两个字

String attribute = driver.findElement(By.id("s-usersetting-top")).getAttribute("innerHTML");

如下代码则表示获取所有html中的对象属性,会在一些元素是不可用或不可用的的状态下,通过鼠标等操作属性才可用或可见,这样我们就定位不到元素了,这时候就需要用到如下代码去找到元素

String attribute = driver.findElement(By.xpath("//html")).getAttribute("innerHTML");

getAttribute(“value”):取输入框里面的值

//获取百度输入框里面的值
String attribute = driver.findElement(By.id("kw")).getAttribute("value");

思考题:如何判断一个按钮是否是灰的

定位xpath后,getAttribute取class包含disable

 boolean attribute = driver.findElement(By.linkText("<上一页")).getAttribute("class").contains("disabled");

(8)isDisplayed() 设置该元素是否用户可见

isDisplayed()用于判断某个元素是否存在在页面上(是否可见),如果可见则返回 True,否则返回 False。

某些情况元素的visibility为hidden或者display属性为none,我们在页面看不到但是实际是存在页面的一些元素) 

WebElement display = driver.findElement(By.id("kw"));  //返回元素的结果是否可见,返回结果为 True 或 False
System.out.println(display.isDisplayed());

(9)、isEnable:判断元素是否可用(可编辑不置灰)

用于存储input、select等元素的编辑状态,可编辑返回true,否则返回false;也可以使用getAttribute(“class”)

WebElement display = driver.findElement(By.id("kw"));  //返回元素的结果是否可见,返回结果为 True 或 False
System.out.println(display.isEnable());

(10)、isSelected()

判断某个元素是否被选中

二、WebDriver API复杂元素操作

(一)、鼠标事件

可以使用click()来模拟鼠标的单击操作,Web产品中提供了更丰富的鼠标交互方式;如右击,双击,悬停等功能,在WebDriver中,将这些关于鼠标操作的方法封装在Actions类中

Actions类提供了鼠标操作的常用方法

1、ContextClick():右击

//(1)鼠标右键点击指定的元素 contextClick() 
Actions action = new Actions(driver);      // Actions(driver) 调用 Actions()类,将浏览器驱动 driver 作为参数传入。
action.contextClick(driver.findElement(By.id("su"))).perform();  

//contexClick(xxx)  context_click()方法用于模拟鼠标右键操作,在调用时需要指定元素定位。
 //perform()执行所有 ActionChains 中存储的行为,可以理解成是对整个操作的提交动作。
   

2、clickAndHold():模拟鼠标点击并控制的动作

     鼠标悬停弹出下拉框

//鼠标悬停 clickAndHold()
Actions action = new Actions(driver);
action.clickAndHold(driver.findElement(By.linkText("设置"))).perform();

3、doubleClick():双击

//鼠标双击 doubleClick()
Actions action = new Actions(driver);
action.doubleClick(driver.findElement(By.name("element"))).perform();

4、dragAndDrop():拖动

      dragAndDrop(source,target):在源元素上按下鼠标左键,然后移动到目标元素上释放

source:鼠标拖动的源元素。

target:鼠标释放的目标元素。

//(4)鼠标拖动 dragAndDrop(source,target)
Actions action = new Actions(driver);     
WebElement source = driver.findElement(By.name("element"));
WebElement target = driver.findElement(By.name("element"));
action.dragAndDrop(source,target).perform();    // 鼠标拖拽动作,将 source 元素拖放到 target 元素的位置。

          5、release():释放鼠标

          6、perform():执行所有Actions中存储的行为

//(5)释放鼠标 release()
Actions action = new Actions(driver);
action.release().perform();

 

(二)、键盘事件

// Keyboard.java
package com.mypro.jase;
import org.openqa.selenium.Keys;        // 在使用键盘按键方法前需要先导入 keys 类
.............
public class keyboard {
	public static void main(String[] args){
		WebDriver driver = new ChromeDriver();
		driver.get("http://www.baidu.com");
		WebElement input = driver.findElement(By.id("kw"));
	
		input.sendKeys("seleniumm");         	//输入框输入内容"seleniumm"
		input.sendKeys(Keys.BACK_SPACE); 		//删除多输入的一个 m;    
		input.sendKeys(Keys.SPACE);	         	//输入空格键+“教程”;    
		input.sendKeys("教程");
		input.sendKeys(Keys.TAB);	            //输入制表符              
		input.sendKeys(Keys.CONTROL,"a");    	//ctrl+a 全选输入框内容;
		input.sendKeys(Keys.CONTROL,"x");		//ctrl+x 剪切输入框内容;
		input.sendKeys(Keys.CONTROL,"v");		//ctrl+v 粘贴内容到输入框;
		input.sendKeys(Keys.ENTER);		        //通过回车键盘来代替点击操作;
		driver.quit();
	}
}

(三)、获得验证信息

在自动化用例执行完成之后,我们可以从页面上获取一些信息来“证明” 用例执行是成功还是失败。

通常用得最多的几种验证信息分别是 title 、URL 和 text。text 方法在前面已经讲过,它用于获取标签对之间的文本信息

getText() :获取元素的文本;

getTitle():用于获得当前页面的 title;

getCurrentUrl() :用户获得当前页面的 URL。

package com.mypro.jase;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class titleRul {
	public static void main(String[] args){
		WebDriver driver = new ChromeDriver();
		driver.get("http://www.126.com");
		
		System.out.println("Before login================");
		//获取当前的 title 和 url
		System.out.println("title of current page is: " + driver.getTitle());
		System.out.println("url of current page is ;" + driver.getCurrentUrl());
		
		//登录 126 邮箱
		driver.findElement(By.id("idInput")).clear();
		driver.findElement(By.id("idInput")).sendKeys("testingwtb");
		driver.findElement(By.id("pwdInput")).clear();
		driver.findElement(By.id("pwdInput")).sendKeys("a123456");
		driver.findElement(By.id("loginBtn")).click();
		
		System.out.println("After login================");
		//获取当前的 title 和 url
		System.out.println("title of current page is ;" + driver.getTitle());
		System.out.println("url of current page is ;" + driver.getCurrentUrl());
		//获得登录用户名
		String text = driver.findElement(By.id("spnUid")).getText();
		System.out.println(text);
		driver.quit();
	}
}

(四)、设置元素等待

当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成的,这给元素的定位增加了困难。如果因为在加载某个元素时延迟而造成元素定位失败的情况,那么就会降低自动化脚本的稳定性。我们可以通过设置元素等待提高这种问题而造成的不稳定。

1、timeouts 方法

       A、implicitlyWait

识别对象时的超时时间。过了这个时间如果对象还没找到的话就会抛出NoSuchElement 异常。

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

      B、setScriptTimeout

异步脚本的超时时间。WebDriver 可以异步执行脚本,这个是设置异步执行脚本脚本返回结果的超时时间。

driver.manage().timeouts().setScriptTimeout(3, TimeUnit.SECONDS);

      C、pageLoadTimeout

页面加载时的超时时间。因为 WebDriver 会等页面加载完毕再进行后面的操作, 所以如果页面超过设置时间依然没有加载完成,那么 WebDriver 就会抛出异常;

driver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS);

2、sleep 休眠方法

有时间我们希望脚本执行到某一位置时做固定时间的休眠,尤其是在脚本调试的过程中。那么可以使用Java 提供的 Thread.sleep(2000)方法;当执行到 sleep()方法时会固定的休眠所设置的时长(这里以毫秒为单位);然后再继续执行。

public static void main(String[] args){
	WebDriver driver = new ChromeDriver();
	driver.get("http://www.baidu.com/");
	try {               	     //必须异常处理
		Thread.sleep(2000) ;
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
	
	driver.findElement(By.id("kw")).sendKeys("selenium");
	driver.findElement(By.id("su")).click();
	
	try {                         //必须异常处理
		Thread.sleep(3000);
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
	driver.quit();
}

更多元素操作方法请到参考官网的API:https://seleniumhq.github.io/selenium/docs/api/java​​​​​​​

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值