• PO设计模式实例


    文件结构

     页面定位元素:zentao.properties

     1 #login page
     2 username = //*[@id='account']
     3 password = //*[@name='password']
     4 loginbt = //*[@id='submit']
     5 
     6 #navigation
     7 productwindow=//*[contains(@data-id,'product')]
     8 creat=//*[contains(@data-id,'creat')]
     9 
    10 #product create page
    11 productname=//*[@id='name']
    12 productcode=//*[@id='code']
    13 productowner=//*[@id='PO']
    14 producttype=//*[@id='type']
    15 productdescription=/html/body
    16 savebutton=//*[@id='submit']
     1 package task;
     2 
     3 import java.io.FileNotFoundException;
     4 import java.io.IOException;
     5 
     6 import org.openqa.selenium.JavascriptExecutor;
     7 import org.openqa.selenium.WebDriver;
     8 import org.openqa.selenium.WebElement;
     9 import org.openqa.selenium.support.ui.Select;
    10 
    11 import util.ElementLocation;
    12 import util.ReadProperties;
    13 
    14 public class CreatNewProduct {
    15     
    16     public static void creat_new_product(WebDriver dr,String prodname,String prodcode) throws FileNotFoundException, IOException{
    17         
    18         //跳转进入产品界面
    19         ElementLocation.locate(dr, "xpath", ReadProperties.getprop("zentao", "productwindow")).click();
    20         //点击添加产品
    21         ElementLocation.locate(dr, "xpath", ReadProperties.getprop("zentao", "creat")).click();
    22         
    23         ElementLocation.locate(dr, "xpath", ReadProperties.getprop("zentao", "productname")).sendKeys(prodname);
    24         ElementLocation.locate(dr, "xpath", ReadProperties.getprop("zentao", "productcode")).sendKeys(prodcode);
    25         
    26         ((JavascriptExecutor)dr).executeScript("document.getElementById('PO').style.display='block'");
    27         WebElement po = ElementLocation.locate(dr, "xpath", ReadProperties.getprop("zentao", "productowner"));
    28         Select productowner = new Select(po);
    29         productowner.selectByValue("admin");
    30 
    31         //产品描述
    32         dr.switchTo().frame(0);
    33         ElementLocation.locate(dr, "xpath", ReadProperties.getprop("zentao", "productdescription")).sendKeys("这是一个Java UI实战");
    34         dr.switchTo().defaultContent();
    35 
    36         //点击保存
    37         ElementLocation.locate(dr, "xpath", ReadProperties.getprop("zentao", "savebutton")).click();
    38                 
    

    流程操作

    1、新建产品

     1 package task;
     2 
     3 import java.io.FileNotFoundException;
     4 import java.io.IOException;
     5 
     6 import org.apache.xmlbeans.SchemaLocalElement;
     7 import org.openqa.selenium.JavascriptExecutor;
     8 import org.openqa.selenium.WebDriver;
     9 import org.openqa.selenium.WebElement;
    10 import org.openqa.selenium.support.ui.Select;
    11 
    12 import util.ElementLocation;
    13 import util.ReadProperties;
    14 
    15 public class CreatNewProduct {
    16     
    17     public static void creat_new_product(WebDriver dr,String prodname,String prodcode) throws FileNotFoundException, IOException{
    18         
    19         //跳转进入产品界面
    20         ElementLocation.locate(dr, "xpath", ReadProperties.getprop("zentao", "productwindow")).click();
    21         //点击添加产品
    22         ElementLocation.locate(dr, "xpath", ReadProperties.getprop("zentao", "creat")).click();
    23         
    24         ElementLocation.locate(dr, "xpath", ReadProperties.getprop("zentao", "productname")).sendKeys(prodname);
    25         ElementLocation.locate(dr, "xpath", ReadProperties.getprop("zentao", "productcode")).sendKeys(prodcode);
    26         
    27         ((JavascriptExecutor)dr).executeScript("document.getElementById('PO').style.display='block'");
    28         WebElement po = ElementLocation.locate(dr, "xpath", ReadProperties.getprop("zentao", "productowner"));
    29         Select productowner = new Select(po);
    30         productowner.selectByValue("admin");
    31         
    32         
    33         //产品描述
    34         
    35         dr.switchTo().frame(0);
    36         ElementLocation.locate(dr, "xpath", ReadProperties.getprop("zentao", "productdescription")).sendKeys("这是一个Java UI实战");
    37         dr.switchTo().defaultContent();
    38         
    39         
    40         //点击保存
    41         ElementLocation.locate(dr, "xpath", ReadProperties.getprop("zentao", "savebutton")).click();
    42                 
    43     }
    44 }
     1 package task;
     2 
     3 import java.io.FileNotFoundException;
     4 import java.io.IOException;
     5 
     6 import org.openqa.selenium.JavascriptExecutor;
     7 import org.openqa.selenium.WebDriver;
     8 import org.openqa.selenium.WebElement;
     9 import org.openqa.selenium.support.ui.Select;
    10 
    11 import util.ElementLocation;
    12 import util.ReadProperties;
    13 
    14 public class CreatNewProduct {
    15     
    16     public static void creat_new_product(WebDriver dr,String prodname,String prodcode) throws FileNotFoundException, IOException{
    17         
    18         //跳转进入产品界面
    19         ElementLocation.locate(dr, "xpath", ReadProperties.getprop("zentao", "productwindow")).click();
    20         //点击添加产品
    21         ElementLocation.locate(dr, "xpath", ReadProperties.getprop("zentao", "creat")).click();
    22         
    23         ElementLocation.locate(dr, "xpath", ReadProperties.getprop("zentao", "productname")).sendKeys(prodname);
    24         ElementLocation.locate(dr, "xpath", ReadProperties.getprop("zentao", "productcode")).sendKeys(prodcode);
    25         
    26         ((JavascriptExecutor)dr).executeScript("document.getElementById('PO').style.display='block'");
    27         WebElement po = ElementLocation.locate(dr, "xpath", ReadProperties.getprop("zentao", "productowner"));
    28         Select productowner = new Select(po);
    29         productowner.selectByValue("admin");
    30 
    31         //产品描述
    32         dr.switchTo().frame(0);
    33         ElementLocation.locate(dr, "xpath", ReadProperties.getprop("zentao", "productdescription")).sendKeys("这是一个Java UI实战");
    34         dr.switchTo().defaultContent();
    35 
    36         //点击保存
    37         ElementLocation.locate(dr, "xpath", ReadProperties.getprop("zentao", "savebutton")).click();
    38                 
    39     }
    40 

    2、登录操作: LoginToZentao

     1 package task;
     2 
     3 import java.io.FileNotFoundException;
     4 import java.io.IOException;
     5 
     6 import org.openqa.selenium.WebDriver;
     7 
     8 import util.ElementLocation;
     9 import util.ReadProperties;
    10 
    11 public class LoginToZentao {
    12     
    13     public static void login_to_zentao(WebDriver dr,String username,String password) throws FileNotFoundException, IOException{
    14         ElementLocation.locate(dr, "xpath", ReadProperties.getprop("zentao", "username")).clear();
    15         ElementLocation.locate(dr, "xpath", ReadProperties.getprop("zentao", "username")).sendKeys(username);
    16         ElementLocation.locate(dr, "xpath", ReadProperties.getprop("zentao", "password")).clear();
    17         ElementLocation.locate(dr, "xpath", ReadProperties.getprop("zentao", "password")).sendKeys(password);
    18         ElementLocation.locate(dr, "xpath", ReadProperties.getprop("zentao", "loginbt")).click();
    19     }
    20 }

    常用方法

    1、登录:BrowserSelector

     1 package util;
     2 
     3 import org.openqa.selenium.WebDriver;
     4 import org.openqa.selenium.firefox.FirefoxDriver;
     5 
     6 public class BrowserSelector {
     7     public static WebDriver browser(WebDriver dr,String browsername,String url) throws InterruptedException {
     8         if(browsername.equals("Firfox")){
     9             System.setProperty("webdriver.gecko.driver", "D://geckodriver.exe");
    10             System.setProperty("webdriver.firefox.bin","D://firefox.exe");
    11             dr = new FirefoxDriver();
    12         }
    13         dr.manage().window().maximize();
    14         dr.get(url);
    15         Thread.sleep(1000);
    16         return dr;
    17     }
    18 }

    2、元素定位:ElementLocation

     1 package util;
     2 
     3 import org.openqa.selenium.By;
     4 import org.openqa.selenium.WebDriver;
     5 import org.openqa.selenium.WebElement;
     6 import org.openqa.selenium.support.ui.ExpectedConditions;
     7 import org.openqa.selenium.support.ui.WebDriverWait;
     8 
     9 public class ElementLocation {
    10     
    11     public static WebElement locate(WebDriver dr,String locatetype,String locatepath) {
    12         
    13         WebElement el = null;
    14         WebDriverWait wait = new WebDriverWait(dr,5);
    15         
    16         if(locatetype.equals("id")){
    17             wait.until(ExpectedConditions.elementToBeClickable(By.id(locatepath)));
    18             el = dr.findElement(By.id(locatepath));
    19         }
    20         else if(locatetype.equals("xpath")){
    21             wait.until(ExpectedConditions.elementToBeClickable(By.xpath(locatepath)));
    22             el = dr.findElement(By.xpath(locatepath));
    23         }
    24         else if(locatetype.equals("name")){
    25             wait.until(ExpectedConditions.elementToBeClickable(By.name(locatepath)));
    26             el = dr.findElement(By.name(locatepath));
    27         }
    28         else if(locatetype.equals("classname")){
    29             wait.until(ExpectedConditions.elementToBeClickable(By.className(locatepath)));
    30             el = dr.findElement(By.className(locatepath));
    31         }
    32         return el;
    33         
    34     }
    35 }

    3、读取Excel:RangeDatabyPOI

     1 package util;
     2 
     3 import java.io.File;
     4 import java.io.FileInputStream;
     5 import java.io.IOException;
     6 import java.util.ArrayList;
     7 import java.util.List;
     8 
     9 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    10 import org.apache.poi.ss.usermodel.Cell;
    11 import org.apache.poi.ss.usermodel.Row;
    12 import org.apache.poi.ss.usermodel.Sheet;
    13 import org.apache.poi.ss.usermodel.Workbook;
    14 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    15 
    16 public class RangeDatabyPOI {
    17     
    18     public static Object[][] poiRangeData(String filePath) throws IOException {
    19         
    20         File file = new File( filePath);
    21         //读取数据流
    22         FileInputStream inputStream = new FileInputStream(file);
    23         Workbook workbook = null;
    24         String extensionName = filePath.substring(filePath.indexOf("."));
    25         if(extensionName.equals(".xls")){
    26             workbook = new HSSFWorkbook(inputStream);
    27         }
    28         else if(extensionName.equals(".xlsx")){
    29             workbook = new XSSFWorkbook(inputStream);
    30         }
    31         else{
    32             System.out.println("文件格式不正确");
    33         }
    34         Sheet sheet = workbook.getSheetAt(0);
    35         int rowCount = sheet.getLastRowNum() - sheet.getFirstRowNum();
    36         List<Object[]> records = new ArrayList<Object[]>();
    37         
    38         for(int i=1;i<rowCount+1;i++){
    39             Row row = sheet.getRow(i);
    40             String fields[] = new String[row.getLastCellNum()];
    41             for(int j=0;j<row.getLastCellNum();j++){
    42                 row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
    43                 fields[j] = row.getCell(j).getStringCellValue();
    44             }
    45             records.add(fields);
    46         }
    47         Object[][] results = new Object[records.size()][];
    48         for(int i=0;i<records.size();i++){
    49             results[i] = records.get(i);
    50         }
    51         return results;
    52         
    53     }
    54     public static void main(String[] args) throws IOException {
    55         Object[][] array = poiRangeData("E:\Java\eclipse\MavenTest\src\test\java\util\test1.xlsx");
    56         System.out.println(array);
    57     }
    58 }

    4、读取配置文件:ReadProperties

     1 package util;
     2 
     3 import java.io.FileInputStream;
     4 import java.io.FileNotFoundException;
     5 import java.io.IOException;
     6 import java.util.Properties;
     7 
     8 public class ReadProperties {
     9     
    10     public static String getprop(String filename,String propname) throws FileNotFoundException, IOException{
    11         Properties props = new Properties();
    12         props.load(new FileInputStream("../target/test-classes/element/"+filename+".properties"));
    13         String str = props.getProperty(propname);
    14         return str;
    15     }
    16 }

    测试用例:testcase

     1 package testcase;
     2 
     3 import java.io.FileNotFoundException;
     4 import java.io.IOException;
     5 import org.openqa.selenium.WebDriver;
     6 import org.testng.annotations.BeforeTest;
     7 import org.testng.annotations.DataProvider;
     8 import org.testng.annotations.Parameters;
     9 import org.testng.annotations.Test;
    10 import org.testng.log4testng.Logger;
    11 
    12 import task.CreatNewProduct;
    13 import task.LoginToZentao;
    14 import util.BrowserSelector;
    15 import util.RangeDatabyPOI;
    16 
    17 public class zt_CreateProduct {
    18     
    19     private static Logger log = Logger.getLogger(Test.class);
    20     
    21     WebDriver dr = null;
    22     String starturl;
    23     String browser;
    24     String name;
    25     String pass;
    26     @Parameters({"url","browser","usrname","usrpass"})
    27     @BeforeTest
    28     public void beforetestng(String url,String br,String usrname,String usrpass) throws InterruptedException {
    29         
    30         starturl = url;
    31         browser = br;
    32         name = usrname;
    33         pass = usrpass;
    34         
    35     }
    36 /*    
    37     @DataProvider(name="exceltest")
    38     public Object[][] excelread() throws IOException{
    39         Object[][] array = RangeDatabyPOI.poiRangeData("E:\Java\eclipse\MavenTest\src\test\java\util\test1.xlsx");
    40         return array;
    41     }
    42     @Test(dataProvider="exceltest")
    43     public void ctestng(String content1,String conten2) throws InterruptedException, FileNotFoundException, IOException{
    44         dr = BrowserSelector.browser(dr, browser, starturl);
    45         LoginToZentao.login_to_zentao(dr, name, pass);
    46     }
    47     */
    48     @Test
    49     public void ctestng() throws InterruptedException, FileNotFoundException, IOException{
    50         dr = BrowserSelector.browser(dr, browser, starturl);
    51         LoginToZentao.login_to_zentao(dr, name, pass);
    52         CreatNewProduct.creat_new_product(dr, "UItest002", "UItest00002");
    53     }
    54 }
  • 相关阅读:
    Java代理(静态/动态 JDK,cglib)
    Java数据库基础(JDBC)
    Servlet基础(工作原理、生命周期)
    Java XML DOM解析(xPath)
    java 文件操作
    从源码看集合ArrayList
    全面理解java异常机制
    python3 利用pip安装ipython notebook
    Centos的一个find命令配合rm删除某天前的文件
    在Pandas中直接加载MongoDB的数据
  • 原文地址:https://www.cnblogs.com/zhufeng123/p/13789465.html
Copyright © 2020-2023  润新知