全国大学生软件测试大赛Web应用测试(四)Selenium功能测试得分技巧


Selenium功能测试环境配置.
Selenium功能测试具体流程.

WebDriver API 的使用

对浏览器的控制是Selenium的一个重要应用,可以对使浏览器最大化,并指定浏览器的url访问网页地址。

 // 浏览器打开指定网址。
 driver.get("https://www.baidu.com");
 // 浏览器最大化。
 driver.manage().window().maximize();
 // 浏览器关闭
 driver.close();

Java Selenium的三种等待方式

1、强制等待

Thread.sleep(3000)  // 强制等待3秒再执行下一步

这种叫强制等待,不管浏览器是否加载完了,程序都得等待3秒,3秒一到,继续执行下面的代码,作为调试很有用,有时候也可以在代码里这样等待,不过不建议总用这种等待方式,太死板,严重影响程序执行速度。
注意:使用强制等待要在test方法中抛出中断异常 throws InterruptedException

2、隐性等待

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

一般在打开浏览器之前设置,隐性等待对整个driver的周期都起作用,会对所有页面元素等待时间操作有效,所以只要设置一次即可,不要把隐性等待当成了sleep在用,走哪儿都来一下。
隐形等待是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。
注意这里有一个弊端,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步,
但有时候页面想要的元素早就在加载完成了,但是因为个别js之类的东西特别慢,我仍得等到页面全部完成才能执行下一步,但我想等我要的元素出来之后就下一步怎么办?
有办法,这就要看selenium提供的另一种等待方式——显性等待wait了。

3、显性等待

//设置显示等待
WebDriverWait wait = new WebDriverWait(driver, 3);
WebElement driver = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("sb_form_q")));
driver .sendKeys("abc");

WebDriverWait,配合该类的unti方法,就能够根据判断条件而进行灵活地等待了。这个的功能是:程序每隔xx秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException。

元素定位的方法

使用Selenium对Web应用进行功能测试,最重要的就是定位到目标元素,然后才能测试其是否满足功能需求。我们可以通过浏览器的自带的开发者调试工具,来获取网页元素的属性。
在这里插入图片描述

1)id

通过元素的ID属性来定位元素。

WebElement kwElement = driver.findElement(By.id("sb_form_q"));
           kwElement.clear();
           kwElement.sendKeys("CSDN");
           driver.findElement(By.id("sb_go_par")).click();

2)name

通过元素的name属性来定位元素。

WebElement kwElement = driver.findElement(By.name("q"));

3)className、tag、css selector。

driver.findElement(By.className("b_searchbox"));
driver.findElement(By.tagName("input"));
driver.findElement(By.cssSelector("#sb_form_q"));

4)linkText

<a href="www.baidu.com">
   <span class="label">百度一下,你就知道</span>
</a>

linkText,通过完整的链接文字去查找元素;partialLinkText,通过部分链接文字去查找元素。
以上面的例子为例,这个在页面上展示的就是一个超链接,我们可以通过超链接的全部或者部分文字来定位元素。

driver.findElement(By.linkText("百度一下,你就知道"));
driver.findElement(By.partialLinkText("百度一下"));

5)XPath

XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。**在查找元素的各种方法中更推荐通过元素的Xpath来定位元素,**web网页内容是根据HTML文档结构进行编排的,XPath 是根据元素节点在web网页中的节点位置来进行定位。如下图所示

driver.findElement(By.xpath("//*[@id="sb_form_q"]"));//这是通过节点的相对位置查找元素
driver.findElement(By.xpath("/html/body/div[2]/div/div[1]/div[3]/div/div[1]/ul/li[3]/a/div/i"));//这是通过节点的绝对位置查找元素

在一个完整的Web页面中,拥有相同属性的网页元素通常不止一个,因此,上面所说的driver.findElement拥有复数形式,即:

driver.findElements(By.***("***"));

具体是用什么方法,要看页面的整体布局,具体情况,具体分析。

切换frame

在有些时候,一个页面会嵌套多个frame,这时候如果想要定位某一个frame中的元素,就需要切换到目标元素所在的frame中去,定位操作完成之后,返回默认文档。
具体代码如下:

//根据id找到frame元素(上面几种定位方式都可以),然后切换过去。
WebElement frameElement = driver.findElement(By.id("frame_id"));
driver.switchTo().frame(frameElement);
//在frameElement中测试完对应的功能后需要切换回原来的frame以进行进一步的测试
driver.switchTo().defaultContent();

还有一种查找frame的方法是通过frame的index索引来查找,比如在这个网页中我们可以发现有三个frame,其中
第一个frame的id为topFrame,并且其index索引为0,
第二个frame的index索引为1,
第三个frame的index索引为2。
在这里插入图片描述
我们可以直接通过index索引来查找,这句代码就是直接切换到第三个frame也就是mainFrame中去。
在这里插入图片描述

切换handle

测试可能会在不同的网页窗口句柄中进行,这时候就需要在不同的句柄中进行切换,方法如下

//两种方法都可以
//第一种方法
List<String> lt1 = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(lt1.get(1));
//第二种方法
Set<String> handles = driver.getWindowHandles();
int i = 0;
System.out.println(handles.size());
for (String handle : handles) {	
	if (i==0) {	
		driver.switchTo().window(handle);
		}else {
			i++;
		}
}

鼠标、键盘事件操作

在Web测试中,常见的鼠标操作有:单击、双击、右击、拖拽、悬浮等操作,这些方法封装在了Actions类中。方法有:
① contextClick();//右击
② doubleClick();//双击
③ dragAndDrop(source, target);//拖拽
④ moveToElement();// 悬浮在某一元素上

//构造Actions类,使用该类进行鼠标的各种操作
Actions actions = new Actions(driver);
//鼠标右击
actions.contextClick(kwElement).perform();
//鼠标双击
actions.doubleClick().perform();
//鼠标悬浮在某一元素上
actions.moveToElement(kwElement).perform();

键盘的一些操作主要就是输入键盘上的有特殊功能的字符,比如回车键,删除键等以达到相应地目的。
键符封装在了Keys类中,主要有:删除、空格、制表、回车等。使用组合键Ctrl+a和Ctrl+c等还可以实现全选和复制等功能。

//删除
kwElement.sendKeys(Keys.BACK_SPACE);
//空格
kwElement.sendKeys(Keys.SPACE);
//回车
kwElement.sendKeys(Keys.ENTER);
//选择
kwElement.sendKeys(Keys.CONTROL,"a");
//复制
kwElement.sendKeys(Keys.CONTROL,"c");
  • 39
    点赞
  • 156
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别卷了,球球了。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值