Selenium java通过maven搭建测试环境——6.特殊元素操作

特殊元素定位与操作——模态框

alert

confirm

特殊元素定位与操作——iframe

iframe四种切换方式:

driver.switchTo().frame(index);

driver.switchTo().frame(id);

driver.switchTo().frame(name);

driver.switchTo().frame(WebElement);

切换之后,回到默认内容页面(否则会找不到元素)

driver.switchTo().defaultContent();

chromeDriver.get("");
//在默认的页面去找输入框输入数据
chromeDriver.findElement(By.id("aa")).sendKeys("111");
Thread.sleep(2000);
//进入第一个内嵌页面中定位元素,输入数据
//切换iframe
chromeDriver.switchTo().frame("bframe");
chromeDriver.findElement(By.id("bb")).sendKeys("222");
//进入到第二个内嵌页面中定位元素,输入数据
chromeDriver.switchTo().frame("cframe");
chromeDriver.findElement(By.id("cc")).sendKeys("333");
Thread.sleep(2000);
//回到默认的而页面
chromeDriver.switchTo().defaultContent();
chromeDriver.findElement(By.id("aa")).sendKeys("回到默认页面中");

特殊元素定位与操作——window

当你要操作另外一个窗口页面的元素时,一定要注意先切换窗口

切换方式:传入要操作窗口的name或者句柄handle

driver.switchTo().window(nameOrHandle);

如何获取窗口的句柄

driver.getWindowHandle();//获取当前操作窗口的句柄

driver.getWindowHandles();//获取测试时打开的所有窗口句柄

chromeDriver.get("");
chromeDriver.findElement(By.id("aa")).sendKeys("这是第一个窗口");
System.out.println("跳转前的窗口句柄"+chromeDriver.getWindowHandle());
Thread.sleep(2000); 
//切换到B窗口 
chromeDriver.findElement(By.id("bb")).click();
//虽然页面已经到了B窗口,但是句柄还是在A窗口中,所有你操作的还是A窗口 
Thread.sleep(2000);
System.out.println("跳转后的窗口句柄"+chromeDriver.getWindowHandle()); 
//句柄的切换
//进入到b窗口后,获取到所有窗口的句柄 
Set<String> handles = chromeDriver.getWindowHandles();
//对窗口集合进行遍历 
for (String handle : handles) { //切换句柄
	chromeDriver.switchTo().window(handle);
	if(chromeDriver.getTitle().equals("b.html")) { 
		//如若标题是符合的话,就跳出循环 
		break; 
	} 
}
//对b窗口的元素进行定位 
chromeDriver.findElement(By.id("bb")).sendKeys("这是第二个窗口");

特殊元素定位与操作——select下拉框

如果页面是一个下拉框,我们可以将此web元素封装为select对象

Select select = new Select(WebElementelement);

Select对象常用api

select.getOptions();//获取所有选项

select.selectByIndex(index);//根据索引选中对应的元素

select.selectByValue(value);//选择指定value值对应的选项

select.selectByVisibleText(text);//选中文本值对应的选项、

chromeDriver.get("https://www.baidu.com");
chromeDriver.findElement(By.id("s-usersetting-top")).click();
chromeDriver.findElement(By.linkText("高级搜索")).click(); 
Thread.sleep(2000);
//定位时间下拉框 
WebElement webElement = chromeDriver.findElement(By.name("gpc"));
//把WebElement封装成select对象 
Select select = new Select(webElement);
//select下拉框索引值从0开始 
select.selectByIndex(1); 
Thread.sleep(2000);
select.selectByVisibleText("最近一月");

 特殊元素定位与操作——时间日期控件

分为两种情况:

控件没有限制手动输入,则直接调用sendKeys方法写入时间数据

控件有限制输入,则可以执行一段js来改变元素的value属性值

JavascriptExecutor jsExecutor = (JavascriptExecutor ) driver;

jsExecutor.executeScript(“...”);

//无限制可以输入的input时间日期控件chromeDriver.get("https://www.fliggy.com/?ttid=seo.000000574&seoType=origin");
chromeDriver.findElement(By.xpath("//form[@id='J_FlightForm']//input[@name='depDate']")).sendKeys("2021-12-17");
//限制输入的时间日期控件	
chromeDriver.get("https://www.12306.cn/index/"); 
//javascript执行对象
JavascriptExecutor jsExecutor = chromeDriver; jsExecutor.executeScript("document.getElementById(\"train_date\").removeAttribute(\"readonly\")");
Thread.sleep(1000); chromeDriver.findElement(By.id("train_date")).clear();
Thread.sleep(1000);
chromeDriver.findElement(By.id("train_date")).sendKeys("2021-12-17");

 特殊元素定位与操作——鼠标操作

自动化测试时,有些元素不适合直接点击或者进行某些操作时,可以使用Selenium的Actions类来模拟鼠标键盘操作,通过Actions对象可以发起鼠标左键、右键、移动鼠标等操作,最后使用perform方法执行操作。

actions.clickAndHold(onElement).moveToElement(toElement).release().build().perform();

示例:ZTREE DEMO - drag & drop

chromeDriver.get("http://www.treejs.cn/v3/demo/cn/exedit/drag.html");
WebElement sourceElement = chromeDriver.findElement(By.id("treeDemo_2_span"));
WebElement targetElement = chromeDriver.findElement(By.id("treeDemo_3_span"));
//实例化actions对象,鼠标的相关操作
Actions actions = new Actions(chromeDriver);
actions.clickAndHold(sourceElement).moveToElement(targetElement).release().build().perform();

 特殊元素定位与操作——文件上传

分为两种情况:

类似于下面,使用sendKeys写入文件的路径

<input type=”file” id=”fu” value=”选择文件”>

如果文件上传不是input元素,而是使用的第三方的控件,并且不是input元素,那么这种情况就很棘手了,必须要使用一些第三方的工具,比如autoit等来完成。

chromeDriver.get("F:\\练习素材\\上传文件.html");
chromeDriver.findElement(By.xpath("//input[@type='file']")).sendKeys("C:\\Users\\Public\\Pictures\\Sample Pictures\\111.jpg");
Thread.sleep(2000);
chromeDriver.findElement(By.xpath("//input[@value='uplode']")).click();

 特殊元素定位与操作——验证码

去除验证码

自动识别

万能验证码(推荐)

特殊元素定位与操作——获取窗口截图

在做界面自动化时,为了快速定位失败原因,需要用到截图功能。

getScreenshotAs()来截取当前窗口

1.全屏截图

chromeDriver.get("https://www.baidu.com");
File srcFile = ((TakesScreenshot)chromeDriver).getScreenshotAs(OutputType.FILE);
//保存截图
FileUtils.copyFile(srcFile,new File("d:\\screenshot.png"));

 调用FileUtils的方法,需要在pom.xml文件中配置common.io

<dependency>
     <groupId>commons-io</groupId>
     <artifactId>commons-io</artifactId>
     <version>2.4</version>
</dependency>

2.元素截图

chromeDriver.get("https://www.baidu.com");
WebElement ele = chromeDriver.findElement(By.id("s_lg_img"));
//全屏截图
File screenshot = ((TakesScreenshot)chromeDriver).getScreenshotAs(OutputType.FILE);
BufferedImage  fullImg = ImageIO.read(screenshot);
//获取元素在页面上的位置
Point point = ele.getLocation();
//获取元素的宽度和高度 
int eleWidth = ele.getSize().getWidth();
int eleHeight = ele.getSize().getHeight();
//根据宽度和高度截取图片
BufferedImage eleScreenshot= fullImg.getSubimage(point.getX(), point.getY(), eleWidth, eleHeight);
ImageIO.write(eleScreenshot, "png", screenshot);
//保存图片到本地 
File screenshotLocation = new File("F:\\images\\baiduLogo_screenshot.png");
FileUtils.copyFile(screenshot, screenshotLocation);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值