入住 CI 中国社区 登录
CodeIgniter 中国开发者社区 返回首页

rosemarry的个人空间 https://codeigniter.org.cn/forums/?39678 [收藏] [复制] [分享] [RSS]

日志

selenium+Driver+TestNG

已有 927 次阅读2016-6-23 15:40 |个人分类:Selenium

1、selenium core 是selenium的核心部分,由一些纯JavaScript代码组成并可以运行在windows/linux的不同浏览器上
2、selenium RC 主要是通过网络向服务器发送指令,待服务器接收到指令后启动浏览器发送JavaSrcript,最后将结果返回个用户
3、selenium Grid是seleinum RC的基础上为了解决RC模式不能并发调用的问题而推出的一种解决方案,可以实现多环境,同时测试的需求,其原理是用户从并发的方式向其发送指令,在接到指令后根据设置情况启动多个服务器,之后的处理与selenium RC相似。
4、selenium IDE通过监听用户操作,将其录制成脚本类型,它可以支持7种语言的脚本,包括HTML、Java、C#、Ruby、Python、Perl、PHP
测试框架的三层结构
1、数据层:数据准备阶段,UI数据即执行测试用例时需要向web应用添加的信息,如用户名、URL等,测试数据即数据库中基础数据,这些数据是用来支撑整个系统运作的,没有这些数据,系统就没有办法正常运行,针对数据层这里采用了TestNG的数据驱动测试功能,将数据同一保存成XML格式,并在测试用例中通过不同的标记名称调用数据。
2、测试用例层,应用封装后的selenium完成测试用例的实现,并使用TestNG将测试用例分组,形成多个TestSuite进行控制,这是完成测试任务的最重要的一层,selenium是一个开源的自动化测试框架,它对于完成简单的测试任务可以胜任,但对于复杂的测试项目由于代码复用极低,并且它至少是对简单的一种调用方式,所以在测试中难免要重复多次编写该方法,或者需要多次重新用其自带方法,因此这里对selenium进行一层封装给出同一接口调用。
3、结果保存层,将测试结果以自定义方式发送给项目组成员,这里使用了TestNG-XSLT插件,它可以丰富充实结果的展现形式帮助团队更快确定问题和解决问题。
                                          构建持续集成测试
持续集成的目的:在没有人工干预的情况下运行自动化程序并给出运行结果,同时它保证了项目在任何一个时间段内都有可正确运行的版本,保证了团队的良性运转,一个持续集成系统主要有三部分构成程序自动构建,代码存储库、集成服务器。

取消弹窗消息:XXX.switchTo().alert().dismiss();
确认弹窗消息: XXX.switchTo().alert.Accept();
延时30s   Thread.sleep(3000)
弹出输入框中输入内容:  XXX.switchTo().alert().sendkeys("adafa");

设计自动化测试用例:需要先设计一份测试步骤及其对应的测试检查点:

                                     元素定位的方法:findElement()与findElements()
findElement():返回基于指定查询条件的WebElement对象,或抛出不符合条件的异常
findElements():返回指定查询条件的WebElement对象的集合,或返回null
注:WebElement类支持查询子类元素,如果页面中存在重复元素,但在不同div中我们可以先定位到其付元素,然后定位其子元素,方法如下:
1、WebElement  hello  = XXXX.findElement(By.id("div1")).findElement(By.LinkText("dfdf"))
使用WebElements 定位多个相似的元素,比如页面中存在的五个单选按钮,他们有哦相同的class属性,值为:myRadio 我们想对五个按钮循环操作,我们可以把他们全部取出来放到集合中,然后做循环操作  如下:
List<WebElement>radios = XXX.findElements(By.className("myRadio"));
for (int i=0;i<radios.size();i++)
radio.get(i).click();

2、使用相对路径定位元素
eg:WebElement username = XXXX.findElement(By.CssSelector("input"));
另:为了使这种方法更准确的定位元素
a、结合id来id来定位 XXX.findElement(By.CssSelector("input#username"));
另一种写法:XXX.findElement(By.CssSelector("#username"));
b、使用元素的任何属性来定位元素
XXXX.findElement(By.cssSelector("标签名[属性名='属性值']"))
C、匹配部分属性值
^= 匹配属性值从XXX开头的元素
XXXX.findElement(By.cssSelector("标签名[属性名^='XXX']"))
$=匹配属性值从XXX结尾的元素
XXXX.findElement(By.cssSelector("标签名[属性名$='XXX']"))
*=匹配属性值包含XXX的元素
XXXX.findElement(By.cssSelector("标签名[属性名*='XXX']"))

3、使用相对+绝对路径方法
  XXX.findElement(By.cssSelector("div#login>input"))该方法中"div#login>input"首先通过相对路径定位到id为login的div元素,然后查找其子元素input(绝对路径)
4、使用Xpath定位元素,相比cssSelector,xpath是我比较常用定位元素的方式。
缺点:消耗系统性能
类似于cssSelector,使用部分属性值匹配元素
starts-with():   driver.findElement(By.xpath("//input[starts-with(@id,'user')]"))
ends-with():   driver.findElement(By.xpath("//input[ends-with(@id,'name')]"))
contains():    driver.findElement(By.xpath("//input[contains(@id,"name")]"))
使用任意属性值匹配元素''
driver.findElement(By.xpath("//input[@*='username']"))

5、使用innerText定位元素
a、使用CssSelector查找innerText定位元素
   driver.findElement(By.cssSelector("span[textContent='新闻']"))
b、使用xpath的text函数
包含匹配:driver.findElement(By.xpath("//span[contains(text(),"hello")]"))
绝对匹配:driver.findElement(By.xpath("//span[text()='新闻']"))

路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 入住 CI 中国社区