首页 > 代码库 > 自动化中的PageObject思想
自动化中的PageObject思想
谈着这个话题很大,因为我自己在自动化分层的方面做的就不是很好,最近在做java+selenium中,如果不分层去管理,代码就显得很乱,如下:
下面代码主要是做了一个登录,登录后在修改自己的一些个人信息,第一次就把最通用的查找控件的方法,写在一个方法里面,所以能看到这样的方式“getmethod.getXpath“取控件。而且登陆这个方法在另外一个方法中也要使用。这里很重复
这个代码第一眼就给人感觉很乱,而且所有内容和执行的操作,都放在一个页面中,太乱了。那我如何整理这样的代码
public class Register { static WebDriver driver=null; SeekMethod getmethod=new SeekMethod(); public String filePath = "E:\\senlenium\\Date.txt"; //Basetest testdriver=new Basetest(); @Before public void StartDriver() { System.out.println("srart selenium"); driver=new ChromeDriver(); driver.get("http://www.91testing.net"); } public void Login(String name,String password) throws InterruptedException{ driver.findElement(By.linkText("登录")).click(); System.out.printf("url of current page is %s\n", driver.getCurrentUrl()); getmethod.getId("login_username",driver).clear(); ((JavascriptExecutor)driver).executeScript("document.getElementById(‘login_username‘).value=http://www.mamicode.com/‘"+name+"‘;"); driver.findElement(By.name("_password")).clear(); ((JavascriptExecutor)driver).executeScript("document.getElementById(‘login_password‘).value=http://www.mamicode.com/‘"+password+"‘;"); Thread.sleep(300); driver.findElement(By.cssSelector("button[type=‘submit‘]")).click(); }@Test public void TestLogin(){ try { Login("xiaozhang","xiaozhang"); String loginassert=getmethod.getXpath(("//li[@class=‘visible-lg‘]"),driver).getText(); System.out.print(loginassert); Assert.assertEquals("我的学习",loginassert); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
解决方法:我把他分为3个类,拿登陆举例
第一个类:定义页面上所有的元素,我取名为LoginElment
package com.Method;
public class LoginElment {/* * 只是定义界面的元素 */ public static String name="login_username"; public static String passWord="_password"; public static String LoginBtn="button[type=‘submit‘]";}
第二个类:定义所有控件的操作。如查找到控件,对他进行单击,双击,填入,因为我的登录在很多地方要使用,所以我使用了单例模式
package com.Method;import org.openqa.selenium.WebDriver;public class LoginBusiness {/* * 主要实现控件的方法 * 如查找到控件 *//* * 单例模式 */ private static LoginBusiness loginbusiness=null; public static LoginBusiness getInstance(){ if(loginbusiness==null){ loginbusiness=new LoginBusiness(); } return loginbusiness; } public void LoinTab(){ SeekMethod.getLink("登录", BaseTest.driver).click(); } public void inputUserName(String name){ SeekMethod.getId((LoginElment.name),BaseTest.driver).sendKeys(name); } public void inputPassword(String word){ SeekMethod.getName((LoginElment.passWord), BaseTest.driver).sendKeys(word); } public void clickButton(WebDriver driver){ SeekMethod.getcssSelector(LoginElment.LoginBtn, BaseTest.driver).click();} //做断言使用 public String getmethod(){ String loginassert=SeekMethod.getXpath(("//li[@class=‘visible-lg‘]"),BaseTest.driver).getText(); return loginassert; } public void login(String userName,String pw){ SeekMethod.getLink("登录", BaseTest.driver).click(); //driver.findElement(By.linkText("登录")).click(); inputUserName(userName); inputPassword(pw); clickButton(BaseTest.driver); }}
第三个类:实现登录的方法。界面上的自动化就如同手工操作一样,每次执行就是一个操作,如下
public class Login extends BaseTest { WebDriver Driver; LoginBusiness loginbusiness;@BeforeClasspublic void setUp(){ loginbusiness=loginbusiness.getInstance();}
//我这里使用了testng的参数化,下面是两个参数@Test@Parameters({"logname","password"})public void testLogin(String logname,String password){
//第一步:打开登录界面 loginbusiness.LoinTab();
//第二步:输入用户名 loginbusiness.inputUserName(logname);
//第三步:输入密码 loginbusiness.inputPassword(password);//第四步:点击登录
loginbusiness.clickButton(Driver);
//断言 Assert.assertEquals("我的学习",loginbusiness.getmethod());
}
}
是不是看着很像功能测试一样,一步一步的执行,就这样我的login页面的脚本就算完成了,看了后,其他人员也能够一目了然,心情顿时就美丽了
自动化中的PageObject思想
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。