Java+Selenium3框架设计篇6-如何解决多条类下⽤例执⾏只
启动⼀次浏览器的问题
前⾯我们实现了在setUp⽅法中添加登录的⽤例。今天,还是为了解决我们遗留的问题,如果执⾏多条测试⽤例,这些⽤例在不同类⽂件下,我们只需要启动⼀次浏览器,登录⼀次,然后根据顺序去执⾏多个类⽂件下的⽤例,最后退出并关闭浏览器。
解决思路:
1.在⼀个类⽂件中执⾏多个⽤例,我们现在没有问题
2.假如我有两个类⽂件,每个类⽂件都包含⼀个测试⽤例。如何保证⽤例A执⾏完后的driver如何传递给⽤例B
这个如何传递是我们的重点,我之前犯了⼀个错误,在⽤例A和⽤例B都写了⼀个类变量,那就是WebDriver driver。当时执⾏完了⽤例A之后,我也思考过如何把driver传递给⽤例B中去。正确的做法是,⽤例A执⾏完后,@AfterClass⾥⾯不能执⾏driver.quit()语句,这⾥我们替换成时间等待语句。在⽤例B类⽂件中,千万不要再定义WebDriver driver这样的变量,在B中,我们先在@BeforeClass中什么也不写,也就是没有前提条件,这个时候不⽤去管driver如何传递过来。接下来在我们的@Test⽅法中,直
接⽤A.driver来传递我们的driver实例对象,所以,我们在A中需要把driver定义为static变量。说了这么多,我们来看具体⽂件中代码如何写,你就明⽩。
这篇⽂章,只需要上⾯三个⽂件,其他⽂件不变,具体参考前⾯⽂章。
1.A类,这⾥我们的测试京东搜索。
import java.io.IOException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.PageFactory;
stng.annotations.AfterClass;
stng.annotations.BeforeClass;
stng.annotations.Test;
import pageObject.HomePage;
import pageObject.functions.Login;
public class Test_HomePage_Search {
public static WebDriver driver;
@BeforeClass
public void setUp() throws IOException{
Login login = new Login();
login.initSetup();
login.loginValid();
driver = login.driver;
}
@Test
public void test_searchGoods(){
HomePage hp = PageFactory.initElements(driver, HomePage.class);
hp.searchWithKeyword("Java");
}
@AfterClass
public void tearDown() throws InterruptedException{
Thread.sleep(3000);
}
}
2.B类,点击搜索结果的第⼀个商品,点击进⼊详情页,点击添加购物车按钮
import org.openqa.selenium.support.PageFactory;
stng.annotations.AfterClass;
stng.annotations.BeforeTest;
stng.annotations.Test;
import pageObject.GoodsDetailsPage;
import pageObject.SearchResultListPage;
public class Test_AddGoodToCart {
@BeforeTest
public void setUp() {
}
@Test
public void testAddToCart() throws InterruptedException{
SearchResultListPage srlp = PageFactory.initElements(Test_HomePage_Search.driver, SearchResultListPage.class);
srlp.clickItemImg();
// 切换窗⼝到商品详情页
srlp.switchWindow();
GoodsDetailsPage gdp = PageFactory.initElements(Test_HomePage_Search.driver, GoodsDetailsPage.class);
gdp.addGoodToCart();
}
@AfterClass
public void tearDown(){
Test_HomePage_Search.driver.quit();
}
}
上⾯举例的是两个测试类⽂件,如果是N个也是这个原理,只有测试类A中定义WebDriver driver,然后其他测试类直接调⽤静态driver 这个变量,其他测试类只要遇到了driver,就换成A.driver,执⾏到最后⼀个⽤例,需要A.driver.quit()。通过这个⽅式,我们解决了,如何只启动⼀次浏览器就,执⾏多次测试⽤例的⽬标。
l设置⽤例执⾏顺序
项⽬最终⽤例执⾏是通过设置l来管理和执⾏测试⽤例。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "/testng-1.0.dtd">
<suite name="Suite">
<test name="TestJDActions">
<classes>
<class name="testSuite.Test_HomePage_Search"/>
<class name="testSuite.Test_AddGoodToCart"/>
</classes>
</test>
</suite>
2017/09/04更新
⼀些感受:
最近好久没有更新这个Java+Selenium3系列⽂章。主要有两个原因,第⼀个是到⽬前,其实简单的框架设计已经完成,剩下的功能都是⼀些定制的功能,例如如何设置监听,如何测试完后,到报告⽂件夹⾥⾯最新报告通过邮件发送。如何做数据驱动,如果设计关键字驱动框架,如何设计⾏为驱动框架,如何selenium做持续集成操作。这些话题,有些我已经实现,有些知道⼀些⽽已,如果要展开,还是有很⼤篇幅。
第⼆个是有⼀个新的观点想分享给⼤家。如果你学到这⾥,你要不继续学下去,学点数据库相关的操作,实现⼀些数据初始化脚本。其实,这⾥,也是有点打击的。我在介绍接⼝测试的⽂章提到,现在webui⾃动化已经不受重视,已经开始向接⼝⾃动化测试和百合测试迁移。因为webui是变化⾮常平凡的,特别是敏捷开发的项⽬。记住,测试三层⾦字塔模型,UI层的测试花再多时间,对代码的覆盖可能都不到30%,我们需要向接⼝测试,代码测试转移,测试更多的代码覆盖率,从⽽发现更多软件的缺陷。webui⾃动化真的没有什么技术含量,我们不需要成为什么selenium专家,测试领域还有很多⽅向和技术需要我们去掌握,例如app⾃动化测试,app稳定性测试。安全测试,性能测试,任何⼀个⽅向,都不⽐webui⾃动化测试要简单。
所以,⽬前,考虑先把webui⾃动化先放⼀放,花时间去学习接⼝测试和性能测试,以及代码的技能,甚⾄web开发或者android开发,学web开发是更好去做接⼝测试和⽹站功能测试,学android开发是更好去学习android⾃动化测试。这⾥先把⽬前,java+selenium 框架设计部分代码放在。后⾯,如果有必要,会继续更新这个系列⽂章。
selenium怎么使用2019/01/01更新
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论