Selenium自動化測試-進階

  • 瀏覽器、鼠標、鍵盤 操作

 

maximize() 設置瀏覽器最大化

setSize() 設置瀏覽器寬

back() 模擬瀏覽器後退按鈕

forward() 模擬瀏覽器前進按鈕

refresh() 刷新頁面(F5

 

Actions 類提供了鼠標操作的常用方法:

contextClick()

clickAndHold() 鼠標點擊並控制

doubleClick() 雙擊

dragAndDrop() 拖動

 

sendKeys(Keys.BACK_SPACE) 回格鍵(BackSpace
sendKeys(Keys.SPACE) 空格鍵(Space)
sendKeys(Keys.TAB) 製表鍵(Tab)
sendKeys(Keys.ESCAPE) 回退鍵(Esc
sendKeys(Keys.ENTER) 回車鍵(Enter

  • 瀏覽器cookie操作

    WebDriver 操作Cookie的方法
    getCookies() 獲得所有 cookie 信息

  • getCookieNamed(String name) 返回字典的key爲“name”Cookie信息

    addCookie(cookie dict) 添加Cookie。“cookie_dict指字典對象,必須有 namevalue值。

    deleteCookieNamed(String name) 刪除Cookie 信息“name”是要刪除的 cookie名稱

    deleteAllCookies() 刪除所有 cookie 信息。

  •  

    瀏覽器-截圖

在測試過程中需要把結果截屏保存下來。 截操作,圖片用當前時間命名。

import java.io.File;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import org.apache.commons.io.FileUtils;

 

//轉換時間格式

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");

//獲取當前時間

String time = dateFormat.format(Calendar.getInstance().getTime());

//執行屏幕截取

File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);

//利用FileUtils工具類的copyFile()方法保存getScreenshotAs()返回的文件;""即時保存截圖的文件夾

FileUtils.copyFile(srcFile, new File("E:\\截圖", time + ".png"));

  • 瀏覽器-無頭瀏覽器設置

在linux環境執行腳本,一般需要設置無頭瀏覽器模式
import java.util.HashMap;
import java.util.Map;
import org.openqa.selenium.chrome.ChromeOptions;
//使用ChromeOptions的setHeadless
ChromeOptions chrome_options = new ChromeOptions();
//setHeadless true設置無瀏覽器模式
chrome_options.setHeadless(true);
//初始化一個chrome_options屬性的chrome瀏覽器實例
WebDriver driver = new ChromeDriver(chrome_options); 

  • 瀏覽器-模擬手機模式

import java.util.HashMap;
import java.util.Map;
import org.openqa.selenium.chrome.ChromeOptions;
ChromeOptions chrome_options = new ChromeOptions();
//設置手機模式方法1
Map<String, String> mobileEmulation = new HashMap<>();
mobileEmulation.put("deviceName", "iPhone X");
chrome_options.setExperimentalOption("mobileEmulation", mobileEmulation);
//初始化一個chrome_options屬性的chrome瀏覽器實例
WebDriver driver = new ChromeDriver(chrome_options); 

參考:http://chromedriver.chromium.org/mobile-emulation
https://blog.csdn.net/u013948858/article/details/81123951 

瀏覽器-瀏覽器操作

maximize() 設置瀏覽器最大化
setSize() 設置瀏覽器寬高
back() 模擬瀏覽器後退按鈕
forward() 模擬瀏覽器前進按鈕
refresh() 刷新頁面(F5)
//最大化窗口  
driver.manage().window().maximize();
//設置窗口大小爲375*812 
Dimension targetSize = new Dimension(375, 812);         
 driver.manage().window().setSize(targetSize);
// back() 後退到上一個頁面
driver.navigate().back();        
// forward() 前進       
driver.navigate().forward();
//刷新頁面
driver.navigate().refresh();

瀏覽器cookie操作

//查看所有cookie
  System.out.println("delete cookie: " + driver.manage().getCookies());
//查看部分cookie
  System.out.println("get saturn: " + driver.manage().getCookieNamed("saturn"));
//刪除所有cookie
   driver.manage().deleteAllCookies();
   driver.navigate().refresh(); 
//添加cookie
   Cookie c1 = new Cookie("saturn", "ve76e10f83e8e1360bf9619a6c1d982ee");        
   driver.manage().addCookie(c1);  
   driver.navigate().refresh(); 

文件上傳

 

查看元素屬性是否爲“input”?如圖辨別input元素

input元素,則按照一般的input元素的sendkeys方法處理。

input元素,只可以直接把文件路徑輸入上傳

        driver.findElement(By.xpath("//*[@id=\"app\"]/div/section/div[2]/input")).sendKeys("C:\\Koala.jpg");

        TimeUnit.SECONDS.sleep(10);

 


非input元素,可以藉助於Robot類。 或者第三方工具AutoIT。 Robot方法如下

// 指定圖片的路徑
    StringSelection sel = new StringSelection("C:\\Penguins.jpg");
 // 把圖片文件路徑複製到剪貼板
    Toolkit.getDefaultToolkit().getSystemClipboard().setContents(sel,null);
    System.out.println("selection" +sel);
 // 點擊本地上傳圖片
     driver.findElement(By.xpath("//*[@id=\"app\"]/div/section/div[3]/input")).click();
// 新建一個Robot類的對象
     Robot robot = new Robot();
     Thread.sleep(1000);         
// 按下回車
     robot.keyPress(KeyEvent.VK_ENTER);        
// 釋放回車
     robot.keyRelease(KeyEvent.VK_ENTER);
// 按下 CTRL+V
     robot.keyPress(KeyEvent.VK_CONTROL);
     robot.keyPress(KeyEvent.VK_V);    
// 釋放 CTRL+V
     robot.keyRelease(KeyEvent.VK_CONTROL);
     robot.keyRelease(KeyEvent.VK_V);
     Thread.sleep(1000);          
     // 點擊回車 Enter 
     robot.keyPress(KeyEvent.VK_ENTER);
     robot.keyRelease(KeyEvent.VK_ENTER);

處理Alert彈窗

 很多時候,我們進入一個網站,就會彈窗一個alert框,有些我們直接關閉,有些可能有取消和確定按鈕,還有些調查的alert框,可以運行用戶輸入文字。
accept()方法就是確定,dismiss()就是點擊alert框上面的取消按鈕,getText()就是獲取alert內部的文字

利用Javascript處理豎向滾動條

    使用javascript腳本去處理豎向滾動條。webdriver中是沒有拖動滾動條的方法的,需要藉助javascript來根據一個頁面元素去實現拖動滾動條的過程
一個是webdriver中如何執行Js腳本,第二個是如何寫js滾動到某一個元素附近。
 // 定義頁面底部 一個元素
        WebElement element = driver.findElement(By.xpath("//*[@id=\"app\"]/div/div[8]/div[2]/a"));
 //創建一個javascript 執行實例
      JavascriptExecutor je = (JavascriptExecutor) driver;     
//執行js語句,拖拽瀏覽器滾動條,直到該元素到底部,馬上就不可以見
      je.executeScript("arguments[0].scrollIntoView(true);",element);

處理下拉框選擇

通過相同的Xpath表達式可以獲取一組元素,然後把這一組元素放到集合類list中,通過遍歷,判斷一個元素的文字部分是不是包含一個我們要操作的字符串,如果是就點擊該元素,並退出當前循環,ele.getAttribute("inerHTML")就是獲取當前元素上面的文字,相當於ele.getText().。
// 點擊選中速度這個下拉菜單
    driver.findElement(By.xpath("//*[@id='speed-button']")).click();
// 一個節點下所有的option選項
    List<WebElement> list = driver.findElements(By.xpath("//*[@id='speed-menu']/li/div"));
    for (WebElement ele : list){
    if(ele.getAttribute("innerHTML").equals("Fast")){
        ele.click();
        break;
    }
    }

 

  •  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章