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.
第二种方法比第一种方法写得更详细,把登录方法给拆分不同子步骤方法进行(建议开发中用)