2018-11-16容器方法調(diào)用

一 BaseUI

  • 工具類的基本內(nèi)容
  • 點擊
  • 輸入
  • 啟動瀏覽器
  • 關(guān)閉瀏覽器
  • @Beforeclass 在所有類之前執(zhí)行
  • @Afterclass 在所有類之后執(zhí)行
package com.guoyasoft.autoUI.common;

import java.io.File;
import java.io.IOException;
import java.util.Set;
import java.util.concurrent.TimeUnit;

import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class BaseUI {
    //這個變量的類型是webDriver 網(wǎng)站驅(qū)動
    public WebDriver driver;
    public String pageTitle;
    public String pageUrl;
    
    public BaseUI(){
        
    }
    
    public BaseUI(WebDriver driver){
        this.driver=driver;
    }

    //在所有類之前執(zhí)行
    @BeforeClass
    public void before(){
        //打開瀏覽器
        // 設置環(huán)境變量陌选,指定chromedriver的路徑
                System.setProperty("webdriver.chrome.driver",
                        "src/main/resources/selenium/driver_v236_63_65/chromedriver.exe");
                // 設置瀏覽器的參數(shù)
                ChromeOptions options = new ChromeOptions();
                // 最大化瀏覽器
                options.addArguments("--test-type", "--start-maximized");
                // options.setBinary("C:/XXXXXXX/chrome.exe");
                // 打開瀏覽器
                driver = new ChromeDriver(options);
                driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
                sleep(1000);
    }
    
    @Test
    @Parameters({"url"})
    public void openUrl(String url){
        //打開URL
        driver.get(url);
        sleep(1000);
    }
    //在所有類執(zhí)行之后執(zhí)行
    @AfterClass
    public void after(){
        //關(guān)閉瀏覽器
        sleep(2000);
        //瀏覽器退出
        driver.quit();
    }
    //封裝的線程等待方法
    public static void sleep(int millis) {
        try {
            Thread.sleep(millis*1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    //封裝的截圖的方法 傳一個driver ,傳一個圖片的名字
    public static void snapshot(TakesScreenshot drivername, String filename) {
        // this method will take screen shot ,require two parameters ,one is
        // driver name, another is file name

        File scrFile = drivername.getScreenshotAs(OutputType.FILE);
        // Now you can do whatever you need to do with it, for example copy
        // somewhere
        try {
            System.out.println("save snapshot path is:c:/" + filename);
            FileUtils.copyFile(scrFile, new File("c:\\" + filename));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            System.out.println("Can't save screenshot");
            e.printStackTrace();
        } finally {
            System.out.println("screen shot finished");
        }
    }
    /*
     * 在文本框內(nèi)輸入字符
     */
    protected void text(WebElement element, String text) {
        try {
            if (element.isEnabled()) {
                element.clear();
                System.out.println("Clean the value if any in "
                        + element.toString() + ".");
                element.sendKeys(text);
                System.out.println("Type value is: " + text + ".");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /*
     * 點擊元素辜限,這里指點擊鼠標左鍵
     */
    protected void click(WebElement element) {

        try {
            if (element.isEnabled()) {
                element.click();
                System.out.println("Element: " + element.toString()
                        + " was clicked.");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /*
     * 在文本輸入框執(zhí)行清除操作
     */
    protected void clean(WebElement element) {

        try {
            if (element.isEnabled()) {
                element.clear();
                System.out.println("Element " + element.toString()
                        + " was cleaned.");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /*
     * 判斷一個頁面元素是否顯示在當前頁面
     */
    protected void verifyElementIsPresent(WebElement element) {

        try {
            if (element.isDisplayed()) {
                System.out.println("This Element " + element.toString().trim()
                        + " is present.");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /*
     * 獲取頁面的標題
     */
    protected String getCurrentPageTitle() {

        pageTitle = driver.getTitle();
        System.out.println("Current page title is " + pageTitle);
        return pageTitle;
    }

    /*
     * 獲取頁面的url
     */
    protected String getCurrentPageUrl() {

        pageUrl = driver.getCurrentUrl();
        System.out.println("Current page title is " + pageUrl);
        return pageUrl;
    }

    public void switchToNextWindow() {

        String currentWindow = driver.getWindowHandle();// 獲取當前窗口句柄
        Set<String> handles = driver.getWindowHandles();// 獲取所有窗口句柄
        System.out.println("當前窗口數(shù)量: " + handles.size());
        for (String s : handles) {
            if (currentWindow.endsWith(s)) {
                continue;
            } else {
                try {
                    WebDriver window = driver.switchTo().window(s);// 切換到新窗口
                    System.out
                            .println("new page title is " + window.getTitle());
                    break;
                } catch (Exception e) {
                    System.out.println("法切換到新打開窗口" + e.getMessage());

                }
            }
        }
    }
    //根據(jù)頁面標題切換窗口
    public void switchToTitleWindow(String windowTitle) {
        // 將頁面上所有的windowshandle放在入set集合當中
        String currentHandle = driver.getWindowHandle();
        Set<String> handles = driver.getWindowHandles();
        for (String s : handles) {
            driver.switchTo().window(s);
            // 判斷title是否和handles當前的窗口相同
            if (driver.getTitle().contains(windowTitle)) {
                break;// 如果找到當前窗口就停止查找
            }
        }
    }
    
    
}

二 方法調(diào)用

1. 不帶參

14245353-73278ead0da829f1.png
public  void  queryuser(){
      //driver.findElement(By.xpath("http://input[@name='userName']")).sendKeys(users);
      //driver.findElement(By.xpath("http://input[@type='submit']")).click();

      sendkey("http://input[@name='userName']","z");
      click("http://input[@type='submit']");
   }

2.帶參

14245353-5b7c979ad9bdc98e.png
public  void  queryage(String name){
      driver.findElement(By.xpath("http://input[@name='userName']")).clear();
      //driver.findElement(By.xpath("http://input[@type='number'][1]")).clear();
      //driver.findElement(By.xpath("http://input[@type='number'][1]")).sendKeys(age);
      driver.findElement(By.xpath("http://input[@name='userName']")).sendKeys(name);
      driver.findElement(By.xpath("http://input[@type='submit']")).click();
      sleep(1000);
  }

3.調(diào)用下拉框

14245353-373fe0c7ac81a196.png
public  void queryeducation3(String education){
    //使用findelement查找select元素 使用Webelement 對對象聲明變量進行保存
        WebElement element = driver.findElement(By.xpath("http://select[@name='education']"));
        //新建一個selenium 下拉框處理對象,對sele 進行處理下拉框 使用時需要傳參,傳參為定位的select下拉框
        Select sele= new Select(element);
        //通過自己聲明的sele進行文本類型的查詢
        sele.selectByVisibleText(education);
        driver.findElement(By.xpath("http://input[@type='submit']")).click();
      }

三 內(nèi)置批量容器類型

1. 固定長度類型 數(shù)組

14245353-363741a32dcdbe0a.png
public String users [] [] ={
      //先橫著第幾行,后豎著第幾列
      {"zz1","xx1","cc1","aa1","ss1"},
      {"zz2","xx2","cc2","aa2","ss2"},
      {"zz3","xx3","cc3","aa3","ss3"},
      {"zz4","xx4","cc4","aa4","ss4"},
      {"zz5","xx5","cc5","aa5","ss5"}
  };
  @Test
  public void deome(){
    for (int i = 0; i < users.length; i++) {
      System.out.println(users[i][0]);
      System.out.println(users[i][1]);
    }
  }

2.變化長度的類型 列表

  • 只能用來存儲單值


    14245353-f6b0815430abb34f.png
public  void list(){
    //創(chuàng)建一個list列表
    List<String> list = new ArrayList<String>();
    //列表添加數(shù)據(jù) list.add();
    list.add("周");
    list.add("楊");
    list.add("陳");
    list.add("周2");
    list.add("吳");
    System.out.println(list.get(3));
    System.out.println(list.get(4));
    System.out.println(list.size());
  }

3.存儲鍵值對的類型

14245353-84ef2a7388003552.png
public  void  map(){
    //Map 用來存儲鍵值對數(shù)據(jù)  取數(shù)據(jù)通過鍵值對來取
    Map<String,Integer> jianzhidui=new HashMap<String, Integer>();
    jianzhidui.put("周",23);
    jianzhidui.put("楊",21);
    jianzhidui.put("吳",22);
    jianzhidui.put("王",24);
    System.out.println("周的年齡是"+jianzhidui.get("周"));
    System.out.println("楊的年齡是"+jianzhidui.get("楊"));
    System.out.println("總共有多少條"+jianzhidui.size());
    }

四 maven的作用以及原理

  • 添加依賴jar包
  • 管理開發(fā)依賴jar包
  • 依賴第三方代碼位置本地倉庫-官方倉庫
  • 官方倉庫地址:http://repo1.maven.org/maven2/
  • 本地倉庫(按配置找selnium和testng)

maven配置依賴

工程中使用pom文件配置依賴
maven依賴配置 pom.xml 依賴配置
<dependency> 依賴
<groupId>org.jvnet.localizer </groupId> 域名 公司名
<artifactId>localizer </artifactId> 項目名稱
<version>1.8 </version> 版本
</dependency>
groupId一般分為多個段送讲,這里我只說兩段睦裳,第一段為域,第二段為公司名稱。域又分為org、com、cn等等許多蜡娶,其中org為非營利組織,com為商業(yè)組織映穗。舉個apache公司的tomcat項目例子:這個項目的groupId是org.apache窖张,它的域是org(因為tomcat是非營利項目),公司名稱是apache男公,artigactId是tomcat荤堪。

pom配置信息

項目依賴
插件
目標
建立檔案
項目版本
開發(fā)商
郵件列表


14245353-d86082e10fb701a6.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末合陵,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子澄阳,更是在濱河造成了極大的恐慌拥知,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碎赢,死亡現(xiàn)場離奇詭異低剔,居然都是意外死亡,警方通過查閱死者的電腦和手機肮塞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門襟齿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人枕赵,你說我怎么就攤上這事猜欺。” “怎么了拷窜?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵开皿,是天一觀的道長。 經(jīng)常有香客問我篮昧,道長赋荆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任懊昨,我火速辦了婚禮窄潭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘酵颁。我一直安慰自己嫉你,他們只是感情好,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布躏惋。 她就那樣靜靜地躺著均抽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪其掂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天潦蝇,我揣著相機與錄音款熬,去河邊找鬼。 笑死攘乒,一個胖子當著我的面吹牛贤牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播则酝,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼殉簸,長吁一口氣:“原來是場噩夢啊……” “哼闰集!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起般卑,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤武鲁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蝠检,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沐鼠,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年叹谁,在試婚紗的時候發(fā)現(xiàn)自己被綠了饲梭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡焰檩,死狀恐怖憔涉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情析苫,我是刑警寧澤兜叨,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站藤违,受9級特大地震影響浪腐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜顿乒,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一议街、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧璧榄,春花似錦特漩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至搓蚪,卻和暖如春蛤售,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背妒潭。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工悴能, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人雳灾。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓漠酿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親谎亩。 傳聞我的和親對象是個殘疾皇子炒嘲,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 一宇姚、BaseUI 工具類的基本內(nèi)容 點擊輸入啟動瀏覽器關(guān)閉瀏覽器@Beforeclass:在所有類型之前執(zhí)行@Af...
    YW祥閱讀 215評論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)夫凸,斷路器浑劳,智...
    卡卡羅2017閱讀 134,637評論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,778評論 6 342
  • 簡介 概述 Maven 是一個項目管理和整合工具 Maven 為開發(fā)者提供了一套完整的構(gòu)建生命周期框架 Maven...
    閩越布衣閱讀 4,280評論 6 39
  • 入夜時分呀洲,子墨在朋友圈里看到這樣一段話: 我也被這幅圖感動了,夫妻也好啼止,情人也罷道逗,兩個人在一起多久并不重要,年齡的...
    默默Mona閱讀 957評論 7 2