用PageFactory实现POM

ONE:

TestPOM类中:

public class testPOM {
	WebDriver driver;
	
  @Test
  public void testLogin() throws InterruptedException {
      //引用类
	  JDHomePage hp=PageFactory.initElements(driver, JDHomePage.class);
	  //调用方法
       hp.login("123", "123");	
	  Thread.sleep(3000);
  }

  
  @BeforeClass
  public void beforeClass() throws InterruptedException {
	  System.setProperty("webdriver.chrome.driver", ".\\tools\\chromedriver.exe");
	  driver=new ChromeDriver();
	  
	  driver.manage().window().maximize();
	  driver.get("http://www.jd.com");
	  Thread.sleep(2000);
  }
}

JDHomePage类中:

public class JDHomePage {
//建立每个WebElement对象
	//登录链接
	@FindBy(xpath="/html/body/div[1]/div[2]/div/ul[2]/li[1]/a[1]")
	WebElement login_link;
	
	//账户登录
	@FindBy(xpath="/html/body/div[2]/div[2]/div[1]/div/div[3]/a")
	WebElement login_withAccount;
	
	//输入用户名框
	@FindBy(id="loginname")
	WebElement nameText;
	
	//输入密码框
	@FindBy(id="nloginpwd")
	WebElement pwdText;
	//登录键
	@FindBy(id="loginsubmit")
	WebElement stn;
	
//执行操作
	public void login(String name,String pwd) {
		login_link.click();
		login_withAccount.click();
		nameText.sendKeys(name);
		pwdText.sendKeys(pwd);
		stn.click();
	}
		
}

这种方法虽然业务逻辑,与操作分离,但在JDHomePage类还是封装好了执行方法

TWO:

TestPOM类中:

public class testPOM {
	WebDriver driver;
	
  @Test
  public void testLogin() throws InterruptedException {
	  JDHomePage hp=new JDHomePage(driver);
	  hp.clickLoginLink();
	  hp.inputName("123");
	  hp.inputPwd("123");
	  hp.clickStn();
	 
  }

  
  @BeforeClass
  public void beforeClass() throws InterruptedException {
	  System.setProperty("webdriver.chrome.driver", ".\\tools\\chromedriver.exe");
	  driver=new ChromeDriver();
	  
	  driver.manage().window().maximize();
	  driver.get("http://www.jd.com");
	  Thread.sleep(2000);
  }

 

}

JDHomePage类中:

public class JDHomePage {
	//登录链接
	By login_link=By.xpath("/html/body/div[1]/div[2]/div/ul[2]/li[1]/a[1]");
	
	
	//账户登录
	By login_withAccount=By.xpath("/html/body/div[2]/div[2]/div[1]/div/div[3]/a");
	
	
	//输入用户名框
	By nameText=By.id("loginname");
	
	
	//输入密码框
	By pwdText=By.id("nloginpwd");
	
	
	By stn=By.id("loginsubmit");


	private WebDriver driver;
	//构造方法
	public JDHomePage(WebDriver driver) {
		this.driver=driver;
	}
	
	//点击登录
	public void clickLoginLink() {
		driver.findElement(login_link).click();
		driver.findElement(login_withAccount).click();
	}
	
	public void inputName(String name) {
		driver.findElement(nameText).sendKeys(name);
	}
	
	public void inputPwd(String pwd) {
		driver.findElement(pwdText).sendKeys(pwd);
	}
	
	public void clickStn() {
		driver.findElement(stn).click();
		driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
	}
	//重构方法,执行登陆操作
	public void login(String name,String pwd) {
		
		driver.findElement(login_link).click();
		driver.findElement(login_withAccount).click();
		driver.findElement(nameText).sendKeys(name);
		driver.findElement(pwdText).sendKeys(pwd);
		driver.findElement(stn).click();
		driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
	}
	
}

1.

在本篇中需要注意的是,在页面类中一定要写构造方法,构造方法有一个driver参数,这样页面类被初始化一次,该页面类的实例对象就有driver这个属性,所以在脚本中@Test方法中需要写driver这个参数,如果不写,运行就会报空指针异常错误。

2.

第二种方法比第一种方法写得更详细,把登录方法给拆分不同子步骤方法进行(建议开发中用)

猜你喜欢

转载自blog.csdn.net/weixin_39218743/article/details/86699953
pom