• UI“三重天”之selenium--封装(二)


    基础示例代码:

    /**
     * @author Richered
     **/
    package com.sample;
    
    
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    
    public class TestBaidu {
    	public static WebDriver driver = null;
    	
    	public static void main(String[] args) throws InterruptedException{
    		System.setProperty("webdriver.chrome.driver", "tools/chromedriver.exe");
    		driver = new ChromeDriver();
    		driver.manage().window().maximize();
    		driver.get("https://www.baidu.com");
    		Thread.sleep(2000);
    		driver.findElement(By.xpath("//*[@id="kw"]")).sendKeys("桃李不言、下自成蹊 博客园");
    		Thread.sleep(5000);
    //		driver.findElement(By.xpath("//*[@id="su"]")).click();
    		driver.close();
    	}
    }  

    本例基本上和官方示例代码一般无二,首先是获取浏览器driver,打开浏览器,将浏览器最大化,进入baidu,等待2s,找到百度输入框并传值"桃李不言、下自成蹊 博客园",等待5s,关闭浏览器。

    代码都是被写死的,例如这块不想使用google浏览器,想使用firefox浏览器或者IE浏览器呢?不想将浏览器窗口最大化呢?想进入www.bing.com呢?不想使用xpath的定位方式呢?

    问题抛出来了,这样写代码的方式也着实僵硬,那么如何解决呢?--封装关键字、动作

    封装

      封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是

    将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。(copy百度百科)

      其实讲的通俗一点就是:封装提高了代码的重用性,不用关心具体的实现,当然,封装也是面向对象的三大特征之一。

      看看封装上方的代码是如何实现:

    /**
     * @author Richered
     **/
    package com.sample;
    
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    
    public class KeyWord {
        public WebDriver driver;
        public KeyWord() {
            
        }
        //选择浏览器
        public void openBrowser(String browserType) {
            try {
                switch (browserType) {
                case "chrome":
                    GoogleDriver chrome = new GoogleDriver("tools/chromedriver.exe");
                    driver = chrome.getdriver();
                    break;
                case "ff":
                    FFDriver firefox = new FFDriver("F:\Firefox\firefox.exe", "tools/geckodriver.exe");
                    driver = firefox.getdriver();
                    break;
                default:
                    GoogleDriver c = new GoogleDriver("tools/chromedriver.exe");
                    driver = c.getdriver();
                    break;
                }
            } catch (Exception e) {
                // TODO: handle exception
            }
        }
        
        //关闭浏览器
        public void closeBrowser() {
            try {
                driver.quit();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                System.out.println("关闭浏览器出错!");
            }
        }
        //浏览器大小显示
        public void setWindow(){
            driver.manage().window().maximize();
        }
        
        //访问网站
        public void getURL(String url) {
            try {
                driver.get(url);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        //封装name定位元素并传值
        public void inputByNameAndSubmit(String name,String content) {
            try {
                driver.findElement(By.name(name)).sendKeys(content);
                driver.findElement(By.name(name)).submit();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        //封装id定位元素并传值
        public void inputById(String id, String content) {
            try {
                driver.findElement(By.id(id)).sendKeys(content);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        //用xpath定位元素并传值
        public void inputByxpath(String xpath, String content) {
            try {
                driver.findElement(By.xpath(xpath)).sendKeys(content);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        /***********************************************************/
        //用id定位元素并点击
        public void clickByid(String id) {
            try {
                driver.findElement(By.id(id)).click();
            } catch (Exception e) {
                // TODO: handle exception
            }
        }    
        //用name定位元素并点击
        public void clickByname(String name) {
            try {
                driver.findElement(By.name(name)).click();
            } catch (Exception e) {
                // TODO: handle exception
            }
        }
        //用xpath定位元素并点击
        public void clickByxpath(String xpath) {
            try {
                driver.findElement(By.xpath(xpath)).click();
            } catch (Exception e) {
                // TODO: handle exception
            }
        }
        /***********************************************************/
        //选择点击方法
        public void clickSwitch(String method, String phase) {
            try {
                switch (method) {
                case "id":
                    driver.findElement(By.id(phase)).click();
                    break;
                case "classname":
                    driver.findElement(By.className(phase)).click();
                    break;
                case "name":
                    driver.findElement(By.name(phase)).click();
                    break;
                case "tagname":
                    driver.findElement(By.tagName(phase)).click();
                    break;
                case "linktext":
                    driver.findElement(By.linkText(phase)).click();
                    break;
                case "partialLinktext":
                    driver.findElement(By.partialLinkText(phase)).click();
                    break;
                case "xpath":
                    driver.findElement(By.xpath(phase)).click();
                    break;
                case "css":
                    driver.findElement(By.cssSelector(phase)).click();
                    break;
                default:
                    driver.findElement(By.xpath(phase)).click();
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        //封装强制等待
        public void halt(String time) {
            int t = 1000;
            try {
                t = Integer.parseInt(time);
                Thread.sleep(t);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
        }
    }

    注释里边写的很清楚了,此处封装了选择浏览器,关闭浏览器,访问URL,name、id、xpath的定位元素(传值)方式【当然可以增加其他的定位方式,下同】,name、id、xpath的定位元素并点击,选择点击方法,等待。

    同样是上方示例代码的目的,再看实现方式:

    /**
     * @author Richered
     **/
    package com.sample;
    
    public class TestBaidu {
        public static void main(String[] args) {
    
            KeyWord sm = new KeyWord();
            sm.openBrowser("chrome");
            sm.setWindow();
            sm.getURL("https://www.baidu.com");
            sm.halt("2000");
            sm.inputByxpath("//*[@id="kw"]", "桃李不言、下自成蹊 博客园");
            sm.halt("5000");
            sm.closeBrowser();
        }
    }

    嗯哼,是不是代码量简洁了许多呢?选择哪个浏览器可以灵活选择;定位元素的方式被单独伶了出来,传值即可;动作也被伶了出来,当然等待方式等等关键字、动作都可以进行封装。

    后续~~~~~

     

     
  • 相关阅读:
    MybatisProperties注册IOC容器和初始化
    Springboot源码之application.yaml读取过程
    DataSource的注册容器和初始化
    修改ha_config配置文件
    读书笔记--Python基础教程 001
    Python实现购物车小程序
    Python3实现三级菜单
    实现用户登录并且输入错误三次后锁定该用户
    day1-python 的基础部分
    翻译:《实用的Python编程》06_02_Customizing_iteration
  • 原文地址:https://www.cnblogs.com/richered/p/9801551.html
Copyright © 2020-2023  润新知