通过Java + selenium +testNG + Page Objects 设计模式 实现页面UI的自动化

Page Objects 设计模式

简单的讲,类似与Java面向对象编程,把每个页面都抽象为一个对象类,将页面元素的定位、业务逻辑操作分离开,然后我们可以通过testNG实现业务流程的控制 与 测试

Page Objects实现的方法

1、@FindBy()注解

@FindBy(id=" "),id也可以换位xpath、name、textlink等

通过此注解实现元素定位

2、功能实现

通过自定义的方法,来实现具体的业务逻辑

pageFactory

page object 类主要实现页面对象的初始化,负责把页面对象加单化。

PageFactory类提供的方法都是静态的,可以直接调用,

PageFactory.initElements(WebDriver driver, java.lang.Class<T> pageClassToProxy)

 

我的实际设计思想是:

三层:

1、编写BasePage.java

该类主要作用是把所有测试的页面公共的方法抽出来单独包装

2、编写具体的某个页面对象类,例如:Login.java

该类主要是对某个测试页面元素的定位、和业务逻辑实现;该类需要继承BasePage类

3、使用testNG编写具体测是类,例如:TestLogin.java

最后通过testNG 的xml文件实现测试用例(即方法)的执行

 

下面是通过登录操作实现page Objects的设计思想:

BasePage.java

 1 public class BasePage {
 2     WebDriver driver;
 3     String pageTitle;
 4     Actions action;
 5 
 6     public BasePage(WebDriver driver) {
 7         this.driver = driver;
 8         action = new Actions(this.driver);
 9         this.driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
10 
11     }
12 
13 //打开一个指定的url
14     public void my_open(String url) {
15         // 浏览器最大化
16         this.driver.manage().window().maximize();
17         this.driver.get(url);
18         Reporter.log("打开网址:" + url);
19     }
20 
21     // 点击操作
22     public void my_click(WebElement element) {
23         try {
24 
25             element.click();
26             Reporter.log("点击:" + my_getResult(element));
27         } catch (Exception e) {
28             System.out.println(e);
29         }
30     }
31 
32 //文本款输入指定的值
33     public void my_input_text(WebElement element, String text) {
34         try {
35             element.sendKeys(text);
36             Reporter.log("文本框输入的值为:" + text);
37         } catch (Exception e) {
38             e.printStackTrace();
39         }
40     }
41 }

 

LoginSpEnterprise .java

 1 public class LoginSpEnterprise extends BasePage {
 2 
 3     public LoginSpEnterprise(WebDriver driver) {
 4         super(driver);
 5     }
 6 
 7     // 定位页面元素
 8 
 9     @FindBy(id = "assistid")
10     WebElement useName;
11     
12     @FindBy(id = "userid")
13     WebElement useId;
14     
15     @FindBy(id = "passWord")
16     WebElement passWord;
17     
18     @FindBy(xpath="//input[@value='登录']")
19     WebElement login_button;
20 
21     //业务操作
22     public void login(String username,String userid,String password) {
23         //输入用户名
24         my_input_text(useName, username);
25         //输入用户id
26         my_input_text(useId, userid);
27         //输入密码
28         my_input_text(passWord, password);
29         //点击登录
30         my_click_button(login_button);
31     }
32 }
testNG测试类:TestLoginSpEnterprise.java
有2点需要注意:
1.driver对象需要指定为静态变量,这样就能保证,在整个测试过程中,driver的传递是唯一的
2.LoginSpEnterprise ls = PageFactory.initElements(driver, LoginSpEnterprise.class);
此处就是实现 LoginSpEnterprise登录页面对象的初始化,如果有多个页面对象需要执行,则下一个测试类里面页面对象的初始化则变为:OpenMerchat om =PageFactory.initElements(TestLoginSpEnterprise.driver,OpenMerchat.class);
 1 public class TestLoginSpEnterprise {
 2     
 3     public static WebDriver driver;
 4     
 5     @DataProvider
 6     public Object[][] lg(){
 7         return new Object[][] {
 8 //                {"","admin","a111111"},
 9 //                {"fan1","","a111111"},
10                 {"fan1","admin","a111111"},
11                 
12         };
13     }
14     
15     @Test(dataProvider="lg",description="测试登录自服务平台")
16     public void testLogin(String username,String userid,String password) {
17         LoginSpEnterprise ls = PageFactory.initElements(driver, LoginSpEnterprise.class);
18         ls.my_open("http://10.10.178.152:8080/spEnterprise/authenticationPos!login.action");
19         ls.login(username, userid, password);
20     }
21     @BeforeClass
22     public void beforeClass() {
23         System.setProperty("webdriver.chrome.driver", "E:\\workspace\\seleniumSource\\lib\\chromedriver.exe");
24         driver = new ChromeDriver();
25     }
26 
27 }

通过testNG.xml实现测试方法的执行

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
 3 <suite name="线下代理商自服务UI自动化">
 4     <listeners>
 5         <listener class-name="dong.test.Untils.TestngListener" />
 6     </listeners>
 7     <test name="登录页面测试">
 8         <classes>
 9 
10             <class name="dong.test.PO.TestLoginSpEnterprise">
11 
12                 <methods>
13                     <include name="testLogin"></include>
14                 </methods>
15 
16 
17             </class>
18         </classes>
19     </test>
20     </suite>

 

转载于:https://www.cnblogs.com/zddwork/p/11466527.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
随着计算机与软件的进步,人机交互越来越需要发展,计算机和用户之间的 接口也越来越具有方便用户的特性,从而制作用户界面系统也越来越复杂和花费 人力,时间。因此为了节省程序设计者的时间,有必要研究界面模板技术。 Java是一种灵活的、跨平台的、彻底地面向对象的程序设计语言。由于Java 具有众多特点是跨平台的优点,采用java编写应用程序界面和web界面越来越流 行。而swing是目前Java中的一个重要的界面工具组类库,是建立GUI的强大工 具,它比起Java的其他界面组件来说具有更多的优点,相信以后用java swing佑U作 的界面的软件和web页面会越来越多,所以研究和设hLjava swing的界面模板有着 非常重要的意义。 本文首先引入和介绍两种设计模式,flpMVC模式和主控模式,并且详细描 述和举例说明]"swing类库与MVC模式之间的关联。然后本文结合国内外现有的 交互式用户界面模型的特点,提出了一种基于java/swing和两种设计模式的交互 式界面的设计思想与具体实现方案。该方案包含用户界面代理,能提供给用户图 形的可视化方式来设计界面的视图,和控制器的设计;这套方案包括了几乎所有 的基本控件,例如对话框,滚动条,分割栏,文本框等的界面生成器;然后以此 方案做了一个示例程序,即利用swing类库和基于前面介绍的设计模式,以按钮 为例创建了一个界面生成器,该按钮生成器能按照用户输入的属性生成具有该属 性的swingYXL格的按钮,并且生成相应的java代码,用户也可以通过代码来改变这 个按钮。也就是说它具有中间件的功能,能将界面内容保存在模板实例中以便修 改及重用,并能根据模板实例生成界面程序源代码。接着讲述了其他swing控件 如编辑框,滚动条,弹出菜单等的做法,由此形成了一个开发swing风格界面的 集成界面模板工具。最后,文章结尾总结了提出和研究设计的这套方案在意义和不足,以及进一步的工作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值