章節十4、5- web頁面的截圖

1、以雅虎網站爲例,當咱們在登陸時,輸入錯誤的用戶名而後點擊「下一步」,用戶名輸入框會提示紅色字體,這個時候咱們就將頁面進行截圖。java

http://commons.apache.org/proper/commons-io/download_io.cgiweb

 1 package basicweb;
 2 
 3 import java.io.File;
 4 import java.util.concurrent.TimeUnit;
 5 
 6 import org.apache.commons.io.FileUtils;
 7 import org.junit.jupiter.api.AfterEach;
 8 import org.junit.jupiter.api.BeforeEach;
 9 import org.junit.jupiter.api.Test;
10 import org.openqa.selenium.By;
11 import org.openqa.selenium.Keys;
12 import org.openqa.selenium.OutputType;
13 import org.openqa.selenium.TakesScreenshot;
14 import org.openqa.selenium.WebDriver;
15 import org.openqa.selenium.WebElement;
16 import org.openqa.selenium.chrome.ChromeDriver;
17 
18 
19 
20 class Screenshots {
21     
22     WebDriver driver;
23     String url;
24     @BeforeEach
25     void setUp() throws Exception {
26         driver = new ChromeDriver();
27         url = "https://login.yahoo.com/config/login?.src=fpctx&.intl=us&.lang=en-US&.done=https%3A%2F%2Fwww.yahoo.com";
28         driver.manage().window().maximize();
29         driver.manage().timeouts().implicitlyWait(2000,TimeUnit.SECONDS);
30     }
31 
32     @Test
33     void test() throws InterruptedException {
34         driver.get(url);
35 //        查找到登陸文本框,輸入test
36         driver.findElement(By.xpath("//input[@name='username']")).sendKeys("test");
37 //        點擊登陸按鈕
38         driver.findElement(By.xpath("//input[@id='login-signin']")).sendKeys(Keys.ENTER);
39     }
40     
41 //    建立一個獲取隨機字符串的方法用來給截圖的內容圖片賦值
42 //    在調用該方法時,列如length賦值是5,那麼文件名的長度就爲5,由5個字符組成
43     public static String getRandomString(int length) {
44 //        StringBuilder 是一個可變的字符序列
45         StringBuilder sb = new StringBuilder();
46         String characters = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPAZSXDCFVGBHNJMKL1234567890";
47 //        for循環從定義的characters字符串中隨機取出指定length長度的字符串
48         for(int i = 0; i<length;i++) {
49 //            Math.random()取0到1之間的一個隨機數而後乘以characters字符串的長度,獲得一個double類型的數據,所以要強制轉換成int類型獲得一個整數,成爲characters字符串的索引
50             int index = (int)(Math.random() * characters.length());
51 //            經過charAt得到字符串上索引的值,來做爲append方法的參數
52 //            append方法是爲了把獲取到的字符所有鏈接到一塊兒,先取一個字符放到bulider緩存區中,而後再循環追加取剩下的值,直到知足length長度
53             sb.append(characters.charAt(index));
54             }
55 //        而後將取到的字符串值返回
56         return sb.toString();
57     }
58     
59     @AfterEach
60     void tearDown() throws Exception {
61     Thread.sleep(2000);
62 //    截圖首先須要一個文件名,調用上面定義的隨機生成文件名的方法,.png表示文件的擴展名
63     String fileName = getRandomString(10)+".png";
64 //    存放圖片的路徑
65     String directory = "C:\\Users\\acer\\Desktop\\";
66 //    以文件的形式輸出
67 //    把driver轉換爲TakesScreenshot類型
68     File sourceFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
69 //    複製文件
70     FileUtils.copyFile(sourceFile,new File(directory+fileName));
71     driver.quit();
72     }
73 }

運行結果:成功截圖且截圖結果與預期結果一致chrome

 

 

注意:(在實現截圖功能的過程當中遇到一個問題浪費了我一下午的時間)apache

雅虎用戶名輸入框在輸入錯誤的用戶名或者爲空的狀況下點擊登陸按鈕,用戶名輸入框會出現紅色的提示性文字。api

一開始我使用的是click來進行點擊,但始終未成功,緩存

 1 driver.findElement(By.xpath("//input[@id='login-signin']")).click(); app

而後我就想是否是定位有問題、farme標籤等等狀況致使我定位不成功,在查詢資料時發現由於各個網站功能實現方式有差別,因此致使click對有些input標籤不生效,而登陸按鈕正是input標籤,因而我改用sendkeys發生Enter按鍵操做來實現,成功,nice。(須要導包keys包)dom

 1 driver.findElement(By.xpath("//input[@id='login-signin']")).sendKeys(Keys.ENTER); ide

 

 

若是有不明白的小夥伴能夠加羣「555191854」問我,羣裏都是軟件行業的小夥伴相互一塊兒學習。學習

相關文章
相關標籤/搜索