selenium面向对象之findBy()的使用

从开始学习用webDriver和java进行编程,面向对象编程就成为了一种必然。方便结构化,更利于代码的管理。

这里列举了登陆、登出、新闻的新增、删除操作。使用面向对象将页面操作进行分离

查找元素,通过使用了findBy().如果项目中的元素随着开发的开发而改变,使用它,就可以方便查找并进行修改。



登陆页面-登陆操作(LoginPage2):

定义页面元素及方法

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;

/**
@author tester
@version :2016年9月29日下午5:38:10
**/
public class LoginPage2 {

    WebDriver driver;
    
    @FindBy(how =How.NAME,name="UserName")
    WebElement username;//用户名
    @FindBy(how =How.NAME,name="Password")
    WebElement password;//密码
    @FindBy(how =How.CLASS_NAME,className="btn-default")
    WebElement loginbutton;//登录按钮
    
    public LoginPage2(WebDriver driver){
        this.driver=driver;
    }
    
    public void login(String userName,String passWord){
        username.sendKeys(userName);
        password.sendKeys(passWord);
        loginbutton.click();
        driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
    }
}

主页--注销操作

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;

/**
@author tester
@version :2016年9月29日下午5:38:32
**/
public class LogoutPage2 {
   WebDriver driver;
   
   @FindBy(how=How.XPATH,xpath="//*[@id='navbar-container']/div[2]/div/li/a/span/small")
   WebElement linkbutton;//欢迎你,XXX
   @FindBy(how=How.XPATH,xpath="//*[@id='navbar-container']/div[2]/div/li/ul/li[3]/a/i")
   WebElement logoutbutton;//注销按钮
   
   public LogoutPage2(WebDriver driver){
	   this.driver=driver;
   }
  public void logout(){
	   
	   linkbutton.click();
	   logoutbutton.click();
	   driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
   }
}

将登陆操作和注销操作进行封装



import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.PageFactory;

/**
@author tester
@version :2016年9月29日下午5:38:50
**/
public class MainPage2 {
  WebDriver driver;
  
  
  public MainPage2(WebDriver driver){
	  this.driver=driver;
	  
  }
  public void openMainPage(String url){
	  driver.get(url);
	  
  }
  public void login(String userName2,String passWord2){
	 LoginPage2 loginpage=PageFactory.initElements(driver, LoginPage2.class);
	 loginpage.login(userName2, passWord2);
  }
  public void logout(){
	  LogoutPage2 logoutpage=PageFactory.initElements(driver, LogoutPage2.class);
	  logoutpage.logout();
  }
}

同理,新闻的新增


import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;

/**
@author tester
@version :2016年9月29日下午5:39:17
**/
public class SendMessagePage2 {
 
    WebDriver driver;
    
    @FindBy(how=How.NAME,name="TZBT")
    WebElement title;
    @FindBy(how=How.NAME,name="LYDW")
    WebElement unit;
    @FindBy(how=How.NAME,name="TZNR")
    WebElement content;
    @FindBy(how=How.XPATH,xpath="//input[@type='button']")
    WebElement saveButton;
    
    public SendMessagePage2(WebDriver driver){
        this.driver=driver;
    }
    
    public void sendNewMessage(String title2,String unit2,String content2){
        title.sendKeys(title2);
        unit.sendKeys(unit2);
        content.sendKeys(content2);
        saveButton.click();
        driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
    }
}

新闻的删除


import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;

/**
@author tester
@version :2016年9月29日下午5:39:50
**/
public class DeleteMessagePage2 {

	WebDriver driver;
	
	@FindBy(how=How.XPATH,xpath="//*[@id='main-container']/div[2]/div/div/div/div[2]/div[1]/div/div[1]/div/div[5]/button")
	WebElement deleteMessageButton;//删除按钮
	@FindBy(how=How.XPATH,xpath="//*[@id='publicinfo']/tbody/tr[1]")
    WebElement checkSelectMessage;//选中通知信息
	
	public DeleteMessagePage2(WebDriver driver){
		this.driver=driver;
	}
	
	public void deleteMessage(){
		checkSelectMessage.click();
		if(!checkSelectMessage.isSelected()){
			checkSelectMessage.click();
		}
		deleteMessageButton.click();
		
		WebElement confirmDeletePrompt=driver.findElement(By.xpath("//button[@type='button' and @i-id='ok']"));//删除弹出框的确认按钮
    	confirmDeletePrompt.click();
		
	}
}


封装新增和删除操作


import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;
import org.openqa.selenium.support.PageFactory;

import com.learningselenium.pageobject.normaluse.DeleteMessagePage1;
import com.learningselenium.pageobject.normaluse.SendMessagePage1;

/**
@author tester
@version :2016年9月29日下午5:40:05
**/
public class MessagePage2 {

	WebDriver driver;
	
	@FindBy(how=How.LINK_TEXT,linkText="通知消息")
	WebElement messageLink;//通知信息的链接
	
	@FindBy(how=How.XPATH,xpath="//*[@id='main-container']/div[2]/div/div/div/div[2]/div[1]/div/div[1]/div/div[2]/button")
	WebElement newMessage;//新增通知信息
	
	@FindBy(how=How.XPATH,xpath="//*[@id='sidebar-collapse']/i")
	WebElement menu;//菜单栏
	
	@FindBy(how=How.XPATH,xpath="//*[@id='sidebar']/div[1]/ul/li[7]/a/span")
	WebElement systemManagement;//系统管理
	
	
	public MessagePage2(WebDriver driver){
		this.driver=driver;
	}
	
	public void enterMessageLink(){
		
		menu.click();//点击打开菜单栏
		systemManagement.click();//点击系统管理
		
		messageLink.click();
		driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
	}
	  //新增通知信息
		public void sendMessage(String title1,String unit1,String content1){
			
			enterMessageLink();
			newMessage.click();
			SendMessagePage2 sendMessagePage=PageFactory.initElements(driver, SendMessagePage2.class);
			sendMessagePage.sendNewMessage(title1, unit1, content1);
		}
		//删除通知信息
		public void deleteMessage(){
			enterMessageLink();
			DeleteMessagePage2 deleteMessagePage=PageFactory.initElements(driver, DeleteMessagePage2.class);
			deleteMessagePage.deleteMessage();
		}
}


最后,一个主方法进行调用并实现。


import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;
import org.openqa.selenium.support.PageFactory;

import com.learningselenium.pageobject.normaluse.MainPage1;
import com.learningselenium.pageobject.normaluse.MessagePage1;

/**
@author tester
@version :2016年9月29日下午5:41:21

@FindBy 可以用于替换driver.findElement()方法查找机制来定位页面元素
@FindBy(how=How.XPATH,xpath=""),结合@FindBy,同时可以使用How数组来替换By的作用
PageFactory替换传统的通过new来实例化对象的方式
**/
public class testMessageWithPageObject2 {

	public static void main(String[] args) {
		  WebDriver driver=new FirefoxDriver();
	      MainPage2 mainPage=PageFactory.initElements(driver, MainPage2.class);
	      MessagePage2 messagePage=PageFactory.initElements(driver, MessagePage2.class);
	      mainPage.openMainPage("http://xxxxxxxx");
	      mainPage.login("admin", "1234567");
	      messagePage.sendMessage("标题", "单位", "内容");
	     
	      
	      mainPage.logout();
	      
	      mainPage.openMainPage("http://xxxxxxxx");
	      mainPage.login("admin", "1234567");
	      messagePage.deleteMessage();
	      mainPage.logout();
	      driver.quit();
	}
}



你可能感兴趣的:(selenium自动化学习之路)