0


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

全国大学生软件测试大赛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 =newWebDriverWait(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

<ahref="www.baidu.com"><spanclass="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 =newArrayList<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 =newActions(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");

本文转载自: https://blog.csdn.net/Kennen0_0/article/details/117792106
版权归原作者 别卷了,球球了。 所有, 如有侵权,请联系我们删除。

“全国大学生软件测试大赛Web应用测试(四)Selenium功能测试得分技巧”的评论:

还没有评论