目錄
前言:
1.什么是自動(dòng)化測(cè)試
2.Selenium是什么
3.Selenium原理
4.Selenium+Java環(huán)境搭建
5.Selenium常用的API使用
5.1定位元素findElement
5.1.1css選擇器
5.1.2id選擇器
5.1.3類(lèi)選擇器
5.1.4xpath選擇器
5.2操作測(cè)試對(duì)象
5.2.1click點(diǎn)擊對(duì)象
5.2.2sendKeys在對(duì)象上模擬按鍵輸入
5.2.3clear清除對(duì)象輸入的文本內(nèi)容
5.2.4submit提交
5.2.5text獲取元素文本信息
5.3鼠標(biāo)點(diǎn)擊與鍵盤(pán)輸入
5.4等待
5.4.1sleep強(qiáng)制等待
5.4.2隱式等待
5.5瀏覽器的操作
5.5.1瀏覽器前進(jìn)和后退
5.5.2瀏覽器滾動(dòng)條的操作
5.5.3瀏覽器界面的最大化
5.5.4瀏覽器界面的寬和高的設(shè)置
5.6鍵盤(pán)事件
5.6.1鍵盤(pán)組合用法
5.7鼠標(biāo)事件
5.8關(guān)閉瀏覽器
5.8截圖
5.9獲取句柄
結(jié)束語(yǔ):
前言:
在前幾節(jié)中小編主要與大家聊了測(cè)試的基礎(chǔ)知識(shí)和測(cè)試的分類(lèi),也簡(jiǎn)單的給大家介紹了一下什么是自動(dòng)化測(cè)試,那么從這節(jié)起小編就與大家一起走進(jìn)自動(dòng)化測(cè)試的世界,帶著大家一起來(lái)學(xué)習(xí)自動(dòng)化測(cè)試的理論,以及自動(dòng)化測(cè)試中的實(shí)操(selenium和Junit),最后在給大家來(lái)講解有關(guān)自動(dòng)化測(cè)試的項(xiàng)目。話不多說(shuō)我們現(xiàn)在開(kāi)始吧!
1.什么是自動(dòng)化測(cè)試
自動(dòng)化測(cè)試就相當(dāng)于將人工測(cè)試手段進(jìn)行轉(zhuǎn)換,讓代碼去執(zhí)行。自動(dòng)化測(cè)試指軟件測(cè)試的自動(dòng)化,在預(yù)設(shè)狀態(tài)下運(yùn)行應(yīng)用程序或者系統(tǒng),預(yù)設(shè)條件包括正常和異常,最后評(píng)估運(yùn)行結(jié)果,也就是我們所說(shuō)的將人為驅(qū)動(dòng)的測(cè)試轉(zhuǎn)化為機(jī)器執(zhí)行的過(guò)程。
自動(dòng)化測(cè)試的分類(lèi):
自動(dòng)化測(cè)試分為單元測(cè)試、接口測(cè)試、UI自動(dòng)化測(cè)試。
按照這個(gè)金字塔模型來(lái)進(jìn)行自動(dòng)化測(cè)試規(guī)劃,可以產(chǎn)生最佳的自動(dòng)化測(cè)試產(chǎn)出投入比(ROI),可以用較少的投入獲得很好的收益。
2.Selenium是什么
Selenium是用來(lái)做web自動(dòng)化測(cè)試框架的。他是web應(yīng)用中基于UI的自動(dòng)化測(cè)試框架。
特點(diǎn):
支持各種瀏覽器,支持各種平臺(tái),支持各種語(yǔ)言(Python、Java、C#、JS、Ruby....),有豐富的API。
3.Selenium原理
我們先來(lái)看一下下面的這張圖片。
- 自動(dòng)化腳本代碼是我們需要通過(guò)idea來(lái)編寫(xiě)代碼。
- webdriver瀏覽器驅(qū)動(dòng)是需要大家去下載的。
- 瀏覽器推薦大家使用Chrome瀏覽器或者是Edge瀏覽器。
這里來(lái)簡(jiǎn)單的給大家解釋一下上面的整個(gè)過(guò)程,此時(shí)我們是想通過(guò)代碼來(lái)控制完成瀏覽器的測(cè)試的,從而達(dá)到自動(dòng)化測(cè)試的效果,但是代碼又不能直接控制瀏覽器,所以這里就需要一個(gè)中間的“媒介”,此時(shí)這里的webdriver就充當(dāng)了這樣的一個(gè)角色。我們的實(shí)現(xiàn)步驟詳細(xì)看下面:
- 首先由我們的代碼將請(qǐng)求發(fā)送給中間的媒介(webdriver).
- 這是webdriver就將代碼里面的意思解析一下,解析成瀏覽器能夠識(shí)別的,然后發(fā)送給瀏覽器。
- 最后由瀏覽器執(zhí)行發(fā)來(lái)的請(qǐng)求。
- 瀏覽器在執(zhí)行完之后需要給我們的一個(gè)反饋。那么此時(shí)瀏覽器再通過(guò)webdriver這個(gè)中間的媒介來(lái)將自己的結(jié)果反饋給代碼。
以上就是整個(gè)執(zhí)行過(guò)程。
4.Selenium+Java環(huán)境搭建
通過(guò)上述簡(jiǎn)單對(duì)Selenium的介紹以及自動(dòng)化測(cè)試過(guò)程的解析,那么下來(lái)我們就通過(guò)代碼來(lái)實(shí)際給大家演示一番。
首先我們先來(lái)測(cè)試一下自己的環(huán)境是否有搭建成功,我們以打開(kāi)百度為例。如果沒(méi)有搭建好環(huán)境的同學(xué)建議先去看小編這這篇文章(http://t.csdn.cn/RH7qM??http://t.csdn.cn/RH7qM)
下面小編就簡(jiǎn)單在闡述一下。
①注意小編的idea編譯器中的側(cè)邊欄中的內(nèi)容都有以下的文件,大家先檢查自己的是否和小編的一樣。
②如果上述是和小編的一樣,那么接下來(lái)小編帶著大家先來(lái)進(jìn)行第一個(gè)測(cè)試。(注:這里大家先不用管里面的代碼的意思,不懂沒(méi)關(guān)系,大家先直接將我的代碼復(fù)制運(yùn)行即可)
代碼展示:
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
//打開(kāi)百度
public class Main {
public static void main(String[] args) {
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver = new ChromeDriver(options);
webDriver.get("https://www.baidu.com/");
}
}
結(jié)果展示:
如果你的代碼運(yùn)行結(jié)果和小編的一樣那么就說(shuō)明我們的環(huán)境已經(jīng)搭建好了。
5.Selenium常用的API使用
5.1定位元素findElement
對(duì)象的定位應(yīng)該是自動(dòng)化測(cè)試的核心,要想操作一個(gè)對(duì)象,首先應(yīng)該識(shí)別這個(gè)對(duì)象,一個(gè)對(duì)象就像一個(gè)人一樣,他也會(huì)有各種特征(屬性),比如我們可以通過(guò)一個(gè)人的身份證號(hào),姓名,或者他在哪個(gè)街道,樓層、門(mén)牌號(hào)...找到這個(gè)人。
那么一個(gè)對(duì)象也有類(lèi)似的屬性,我們可以通過(guò)這些屬性來(lái)找到該對(duì)象。
在webdriver中提供了一系列的對(duì)象定位的方法,常用的有以下幾種:
- id
- name
- class?name
- link?text
- partial?link?text
- tag?name
- xpath
- css?selector
那么接下來(lái)我們就給大家分別演示一下。
5.1.1css選擇器
①首先我們先來(lái)創(chuàng)建一個(gè)ChromeOptions對(duì)象,并通過(guò)該對(duì)象將其設(shè)置為允許訪問(wèn)所有。
//創(chuàng)建一個(gè)ChromeOptions對(duì)象
ChromeOptions options = new ChromeOptions();
//允許訪問(wèn)所有
options.addArguments("--remote-allow-origins=*");
②創(chuàng)建驅(qū)動(dòng),我們要想操控瀏覽器,那就必須通過(guò)webdriver來(lái)控制。
//創(chuàng)建驅(qū)動(dòng)
WebDriver webDriver = new ChromeDriver(options);
③打開(kāi)百度首頁(yè)。
//打開(kāi)百度首頁(yè)
webDriver.get("https://www.baidu.com");
這里我們是通過(guò)webdriver里面的get方法來(lái)獲取到百度的地址的。
④找到百度搜索輸入框
//找到百度搜索輸入框
WebElement element = webDriver.findElement(By.cssSelector(".s_ipt"));
這里我們就需要用到findElement?,通過(guò)By里面的cssSelector來(lái)定位到百度的搜索輸入框,這里我們可以先來(lái)打開(kāi)百度的搜索界面然后再按下F12來(lái)到下面這塊,然后按照下述的步驟就可以定位到搜索框了。
然后就直接將class后面的直接進(jìn)行雙擊復(fù)制即可。?
⑤輸入軟件測(cè)試。
//輸入“軟件測(cè)試”
//通過(guò)sendKeys來(lái)輸入內(nèi)容
element.sendKeys("軟件測(cè)試");
這里我們是通過(guò)sendKeys來(lái)進(jìn)行模擬鍵盤(pán)輸入的,這個(gè)我們后面還有演示。?
⑥找到百度一下按鈕,并進(jìn)行點(diǎn)擊。
//找到百度一下按鈕
//點(diǎn)擊
webDriver.findElement(By.cssSelector("#su")).click();
這里依舊是按照上述的方法,先打開(kāi)百度的搜索框,然后按下F12,進(jìn)行尋找即可,這里我們是通過(guò)id定位的。
那么為了防止速度太快這里我們加上一個(gè)sleep,讓我們可以看清楚整個(gè)過(guò)程。
sleep(3000);
⑦整體代碼展示。
代碼展示:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import static java.lang.Thread.sleep;
public class Test01 {
public static void main(String[] args) throws InterruptedException {
//創(chuàng)建一個(gè)ChromeOptions對(duì)象
ChromeOptions options = new ChromeOptions();
//允許訪問(wèn)所有
options.addArguments("--remote-allow-origins=*");
//創(chuàng)建驅(qū)動(dòng)
WebDriver webDriver = new ChromeDriver(options);
//打開(kāi)百度首頁(yè)
webDriver.get("https://www.baidu.com");
//找到百度搜索輸入框
WebElement element = webDriver.findElement(By.cssSelector(".s_ipt"));
//輸入“軟件測(cè)試”
//通過(guò)sendKeys來(lái)輸入內(nèi)容
element.sendKeys("軟件測(cè)試");
//找到百度一下按鈕
//點(diǎn)擊
webDriver.findElement(By.cssSelector("#su")).click();
sleep(3000);
}
}
結(jié)果展示:
??
5.1.2id選擇器
id是頁(yè)面元素的屬性,我們最常用元素定位方式,但是不是所有的元素都有id的,如果一個(gè)元素有屬性,那么一般在整個(gè)頁(yè)面是唯一的,所以我們一般可以用id來(lái)唯一的定位到這個(gè)元素。
我們是通過(guò)前端工具,例如Chrome瀏覽器的F12,在上述中我們也用到了,找到百度輸入框的屬性信息,如下:
屬性:id = “kw”
我們?cè)谕ㄟ^(guò)findElement(By.cssSelector("kw"))函數(shù)就可以定位到百度的輸入框了。
5.1.3類(lèi)選擇器
類(lèi)選擇器就是通過(guò).class來(lái)定位的,在上述代碼中我們也使用到了,在我們定位百度搜索框的時(shí)候我們使用的就是類(lèi)選擇器來(lái)定位的。
5.1.4xpath選擇器
在上述中我們使用的都是css選擇器來(lái)定位元素的,其實(shí)還有一種是通過(guò)xpath來(lái)定位選擇器。如下代碼所示。
WebElement element = webDriver.findElement(By.xpath("http://*[@id=\"kw\"]"));
在xpath中的數(shù)據(jù)我們是在前端頁(yè)面中查找的,我們打開(kāi)百度搜索框后然后再直接按下F12,然后選中之后右擊鼠標(biāo),如下圖所示:
點(diǎn)擊之后直接就可以將結(jié)果放到我們的代碼中了,這樣也就會(huì)達(dá)到和我們上面一樣的效果。
代碼展示:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import static java.lang.Thread.sleep;
public class Test01 {
public static void main(String[] args) throws InterruptedException {
//創(chuàng)建一個(gè)ChromeOptions對(duì)象
ChromeOptions options = new ChromeOptions();
//允許訪問(wèn)所有
options.addArguments("--remote-allow-origins=*");
//創(chuàng)建驅(qū)動(dòng)
WebDriver webDriver = new ChromeDriver(options);
//打開(kāi)百度首頁(yè)
webDriver.get("https://www.baidu.com");
//找到百度搜索輸入框
// WebElement element = webDriver.findElement(By.cssSelector(".s_ipt"));
WebElement element = webDriver.findElement(By.xpath("http://*[@id=\"kw\"]"));
//輸入“軟件測(cè)試”
//通過(guò)sendKeys來(lái)輸入內(nèi)容
element.sendKeys("軟件測(cè)試");
//找到百度一下按鈕
//點(diǎn)擊
webDriver.findElement(By.cssSelector("#su")).click();
sleep(3000);
//校驗(yàn)
//找到搜索結(jié)果
// webDriver.findElement(By.cssSelector(""));
}
}
結(jié)果展示:
在xpath中使用的路徑有兩種:
- 絕對(duì)路徑:/html/head/title。(注:但是這種一般不常用)
- 相對(duì)路徑:?下面展開(kāi)說(shuō)。
相對(duì)路徑:
- 相對(duì)路徑 +?索引: //form/span[1]/input
- 相對(duì)路徑 +?屬性值://input[@class = "s_ipt"]
- 相對(duì)路徑 +?通配符://*[@*="su"]
- 相對(duì)路徑 +?文本匹配://a[text() = "百度首頁(yè)"]
那么這里我們就可以在加一個(gè)對(duì)測(cè)試結(jié)果的校驗(yàn),我們需要查找的東西有沒(méi)有給我們找到。那么在這里我們是查找有關(guān)于軟件測(cè)試,那么我們就直接查看“測(cè)試”這兩字樣。
首先我們先來(lái)查看對(duì)應(yīng)頁(yè)面上的標(biāo)簽的位置。
那么我們就通過(guò) a em來(lái)進(jìn)行查看。
代碼展示:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.util.List;
import static java.lang.Thread.sleep;
public class Test01 {
public static void main(String[] args) throws InterruptedException {
int flag = 0;
//創(chuàng)建一個(gè)ChromeOptions對(duì)象
ChromeOptions options = new ChromeOptions();
//允許訪問(wèn)所有
options.addArguments("--remote-allow-origins=*");
//創(chuàng)建驅(qū)動(dòng)
WebDriver webDriver = new ChromeDriver(options);
//打開(kāi)百度首頁(yè)
webDriver.get("https://www.baidu.com");
//找到百度搜索輸入框
// WebElement element = webDriver.findElement(By.cssSelector(".s_ipt"));
WebElement element = webDriver.findElement(By.xpath("http://*[@id=\"kw\"]"));
//輸入“軟件測(cè)試”
//通過(guò)sendKeys來(lái)輸入內(nèi)容
element.sendKeys("軟件測(cè)試");
//找到百度一下按鈕
//點(diǎn)擊
webDriver.findElement(By.cssSelector("#su")).click();
sleep(3000);
//校驗(yàn)
//找到搜索結(jié)果
List<WebElement> elements = webDriver.findElements(By.cssSelector("a em"));
for (int i = 0; i < elements.size(); i++) {
//如果返回的結(jié)果有軟件測(cè)試,證明測(cè)試通過(guò),否則測(cè)試不通過(guò)
if (elements.get(i).getText().equals("測(cè)試")) {
flag = 1;
System.out.println("測(cè)試通過(guò)");
break;
}
}
if (flag == 0) {
System.out.println("測(cè)試不通過(guò)");
}
}
}
結(jié)果展示:
總結(jié):那么結(jié)合上述對(duì)比css和xpath選擇器我們認(rèn)為css的效率更
5.2操作測(cè)試對(duì)象
5.2.1click點(diǎn)擊對(duì)象
在上述的代碼中我們也使用到了點(diǎn)擊對(duì)象的操作,如下所示:
//找到百度一下按鈕
//點(diǎn)擊
webDriver.findElement(By.cssSelector("#su")).click();
click()就是用于點(diǎn)擊一個(gè)按鈕的操作,比較簡(jiǎn)單,大家直接用就行了,這里小編也就不再多贅述了。
5.2.2sendKeys在對(duì)象上模擬按鍵輸入
用于在輸入框中輸入一些內(nèi)容。這個(gè)在上面的代碼中也給大家展示過(guò)了,這里就不給大家做過(guò)多的展示了。
5.2.3clear清除對(duì)象輸入的文本內(nèi)容
clear()用于清楚輸入框中的內(nèi)容,比如百度框里默認(rèn)有一個(gè)“請(qǐng)輸入關(guān)鍵字”的信息,再比如我們登錄框一般會(huì)有“賬號(hào)”“密碼”這樣的默認(rèn)信息,當(dāng)我們?cè)谳斎氲臅r(shí)候,他們就會(huì)自動(dòng)清除,這里clear可以幫助我們清除這些信息。
首先定位百度的搜索輸入框然后再清除,如下所示:
webDriver.findElement(By.cssSelector("#kw")).clear();
5.2.4submit提交
submit的效果和click的效果都是一樣的,但是如果點(diǎn)擊的元素放在form標(biāo)簽中,此時(shí)使用submit實(shí)現(xiàn)的效果和click是一樣的,如果點(diǎn)擊的元素放在非form標(biāo)簽中,此時(shí)使用submit就會(huì)報(bào)錯(cuò)。
使用方式如下所示:
//找到百度一下按鈕,點(diǎn)擊一下
webDriver.findElement(By.cssSelector("#su")).click();
//此處的submit與上述的click效果是一樣的
webDriver.findElement(By.cssSelector("#su")).submit();
5.2.5text獲取元素文本信息
text是用來(lái)獲取元素的文本信息的。
這里我們講一個(gè)getAttribute,例如下面的代碼所示:
代碼展示:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
public class Test04 {
public static void main(String[] args) {
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver = new ChromeDriver(options);
webDriver.get("https://www.baidu.com");
String button_value = webDriver.findElement(By.cssSelector("#su")).getAttribute("value");
if (button_value.equals("百度一下")) {
System.out.println("測(cè)試通過(guò)");
}else {
System.out.println(button_value);
System.out.println("測(cè)試不通過(guò)");
}
}
}
結(jié)果展示:
有關(guān)于getCurrentUrl和getTitle的演示:
代碼展示:
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
public class Test05 {
public static void main(String[] args) {
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver = new ChromeDriver(options);
webDriver.get("https://www.baidu.com");
String url = webDriver.getCurrentUrl();
String title = webDriver.getTitle();
if (url.equals("https://www.baidu.com/") && title.equals("百度一下,你就知道")) {
System.out.println("當(dāng)前頁(yè)面url: " + url + ", 當(dāng)前頁(yè)面title:" + title);
System.out.println("測(cè)試通過(guò)");
}else {
System.out.println("測(cè)試不通過(guò)");
}
}
}
結(jié)果展示:
5.3鼠標(biāo)點(diǎn)擊與鍵盤(pán)輸入
在鼠標(biāo)點(diǎn)擊鍵盤(pán)中主要有以下三個(gè)操作:
- send_keys("xx")輸入內(nèi)容
- click()點(diǎn)擊按鈕
- clear()清除輸入框內(nèi)容
在上述的三個(gè)操作中小編在上面的代碼中也給大家有所演示,所以這里就不再做過(guò)多的贅述了。
5.4等待
5.4.1sleep強(qiáng)制等待
sleep是休眠的意思,添加休眠非常簡(jiǎn)單,我們只需要引入time包,就可以在腳本中自由添加休眠時(shí)間了,這里的休眠指固定休眠。
在上述代碼中也要給大家演示到,在后續(xù)的代碼中也會(huì)出現(xiàn),如果大家不會(huì)的話可參考后續(xù)的代碼。
5.4.2隱式等待
隱式等待是通過(guò)添加implicitly_wait()方法就可以方便的實(shí)現(xiàn)智能等待;implicitly_wait(30)的用法比time.sleep()更智能,后者智能選擇一個(gè)固定的時(shí)間等待,前者可以在一個(gè)時(shí)間范圍內(nèi)智能等待。
例如等待3天時(shí)間,如果等待時(shí)間是三天,那么強(qiáng)制等待就會(huì)一致等待,等到三天為止。如果是隱式等待,此時(shí)最長(zhǎng)等待三天的時(shí)間,如果在三天之內(nèi)獲取到頁(yè)面上的元素,此時(shí)就執(zhí)行下面的代碼,如果等到了三天時(shí)間還是沒(méi)有找到這個(gè)元素,此時(shí)就會(huì)報(bào)錯(cuò)。
//隱式等待
webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.DAYS);
5.5瀏覽器的操作
5.5.1瀏覽器前進(jìn)和后退
瀏覽器的前進(jìn):
webDriver.navigate().forward();
瀏覽器的后退:
webDriver.navigate().back();
代碼展示:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import static java.lang.Thread.sleep;
public class Test07 {
public static void main(String[] args) throws InterruptedException {
WebDriver webDriver = new ChromeDriver();
//打開(kāi)百度首頁(yè)
webDriver.get("https://www.baidu.com");
//搜索521
webDriver.findElement(By.cssSelector("#kw")).sendKeys("521");
//點(diǎn)擊
webDriver.findElement(By.cssSelector("#su")).click();
//強(qiáng)制等待3秒
sleep(3000);
//瀏覽器后退
webDriver.navigate().back();
//強(qiáng)制等待3秒
sleep(3000);
//瀏覽器前進(jìn)
webDriver.navigate().forward();
}
}
結(jié)果展示:
由于這里是動(dòng)態(tài)效果所以小編這里就只能截幾張運(yùn)行中的圖片了,大家可以下來(lái)自己在idea中跑一下代碼。
隱式等待和顯示等待的區(qū)別:
- 隱式等待等待的是所有元素。
- 顯示等待等待的是一定的條件。?
5.5.2瀏覽器滾動(dòng)條的操作
①首先我們現(xiàn)在百度中隨便搜索一個(gè)東西,例如下面。
②此時(shí)我們點(diǎn)擊F12,來(lái)到Console。
③接著在下面輸入一下內(nèi)容,然后回車(chē)。
④查看滾動(dòng)條是否來(lái)到低端。
代碼展示:
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import static java.lang.Thread.sleep;
public class Test08 {
public static void main(String[] args) throws InterruptedException {
WebDriver webDriver = new ChromeDriver();
//打開(kāi)百度首頁(yè)
webDriver.get("https://www.baidu.com");
//搜索521
webDriver.findElement(By.cssSelector("#kw")).sendKeys("軟件測(cè)試");
//點(diǎn)擊
webDriver.findElement(By.cssSelector("#su")).click();
//強(qiáng)制等待3秒
sleep(3000);
//讓滾動(dòng)條置于最低端
((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000");
}
}
結(jié)果展示:
5.5.3瀏覽器界面的最大化
代碼展示:
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import static java.lang.Thread.sleep;
public class Test09 {
public static void main(String[] args) throws InterruptedException {
WebDriver webDriver = new ChromeDriver();
//打開(kāi)百度首頁(yè)
webDriver.get("https://www.baidu.com");
//搜索521
webDriver.findElement(By.cssSelector("#kw")).sendKeys("軟件測(cè)試");
//點(diǎn)擊
webDriver.findElement(By.cssSelector("#su")).click();
//強(qiáng)制等待3秒
sleep(3000);
//瀏覽器界面的最大化
webDriver.manage().window().maximize();
//強(qiáng)制等待3秒
sleep(3000);
webDriver.manage().window().fullscreen();
}
}
結(jié)果展示:
這里結(jié)果不好展示,建議大家自己運(yùn)行一下代碼來(lái)看一下。
5.5.4瀏覽器界面的寬和高的設(shè)置
代碼展示:
import org.openqa.selenium.By;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import static java.lang.Thread.sleep;
public class Test10 {
public static void main(String[] args) throws InterruptedException {
WebDriver webDriver = new ChromeDriver();
//打開(kāi)百度首頁(yè)
webDriver.get("https://www.baidu.com");
//搜索521
webDriver.findElement(By.cssSelector("#kw")).sendKeys("軟件測(cè)試");
//點(diǎn)擊
webDriver.findElement(By.cssSelector("#su")).click();
//強(qiáng)制等待3秒
sleep(3000);
//瀏覽器界面的高度和寬度的設(shè)置
webDriver.manage().window().setSize(new Dimension(500, 400));
}
}
結(jié)果展示:
5.6鍵盤(pán)事件
5.6.1鍵盤(pán)組合用法
我們直接來(lái)看代碼展示:
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import static java.lang.Thread.sleep;
public class Test11 {
public static void main(String[] args) throws InterruptedException {
WebDriver webDriver = new ChromeDriver();
webDriver.get("https://www.baidu.com");
//搜索軟件測(cè)試
webDriver.findElement(By.cssSelector("#kw")).sendKeys("軟件測(cè)試");
sleep(3000);
//control + A
webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"A");
sleep(3000);
//control + X
webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"X");
sleep(3000);
//control + V
webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"V");
}
}
結(jié)果展示:
5.7鼠標(biāo)事件
這里我們先在瀏覽器界面中找到一個(gè)圖片并右擊鼠標(biāo),并用F12來(lái)查看圖片的地址。
代碼展示:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;
import static java.lang.Thread.sleep;
public class Test12 {
public static void main(String[] args) throws InterruptedException {
WebDriver webDriver = new ChromeDriver();
webDriver.get("https://www.baidu.com");
webDriver.findElement(By.cssSelector("#kw")).sendKeys("軟件測(cè)試");
webDriver.findElement(By.cssSelector("#su")).click();
sleep(3000);
//找到圖片按鈕
WebElement webElement = webDriver.findElement(By.cssSelector("#s_tab > div > a.s-tab-item.s-tab-item_1CwH-.s-tab-tieba_3gnzZ.s-tab-tieba"));
//鼠標(biāo)右擊
Actions actions = new Actions(webDriver);
sleep(3000);
actions.moveToElement(webElement).contextClick().perform();
}
}
結(jié)果展示:
5.8關(guān)閉瀏覽器
close和quit都是用來(lái)關(guān)閉瀏覽器的,但是它兩有一定的區(qū)別:
- quit是關(guān)閉了整個(gè)瀏覽器,而close只是關(guān)閉了當(dāng)前的頁(yè)面。
- quit清空緩存,close不會(huì)清空緩存。
代碼展示:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import static java.lang.Thread.sleep;
public class Test13 {
public static void main(String[] args) throws InterruptedException {
WebDriver webDriver = new ChromeDriver();
webDriver.get("https://www.baidu.com");
webDriver.findElement(By.cssSelector("#kw")).sendKeys("軟件測(cè)試");
sleep(3000);
webDriver.findElement(By.cssSelector("#su")).click();
sleep(3000);
//關(guān)閉整個(gè)瀏覽器
// webDriver.quit();
//關(guān)閉當(dāng)前的頁(yè)面,get方法獲取到哪一個(gè)瀏覽器的頁(yè)面,此時(shí)關(guān)閉的就是哪一個(gè)
webDriver.close();
}
}
結(jié)果展示:
這里由于是直接關(guān)閉了頁(yè)面所以不好給大家展示,大家自己在idea上運(yùn)行即可。
5.8截圖
我們是通過(guò)getScreenshortAs()方法來(lái)進(jìn)行截圖的,這里的返回值是TakeScreenshort,所以注意的一點(diǎn)是我們需要將webDriver強(qiáng)制轉(zhuǎn)換一下,之后在通過(guò)FileUtils.copyFile來(lái)將圖片放置在我們規(guī)定的路徑下。
我們將所截的圖片放置在了“D:\測(cè)試上傳代碼記錄\測(cè)試Gitee代碼上傳\test-the-code-and-images\測(cè)試截圖圖片”路徑下,并給它起名為20230728.png我們運(yùn)行代碼之后再來(lái)查看里面是否存在截的圖片。
代碼展示:
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import java.io.File;
import java.io.IOException;
import static java.lang.Thread.sleep;
public class Test15 {
public static void main(String[] args) throws InterruptedException, IOException {
WebDriver webDriver = new ChromeDriver();
webDriver.get("https://www.baidu.com");
webDriver.findElement(By.cssSelector("#kw")).sendKeys("軟件測(cè)試");
webDriver.findElement(By.cssSelector("#su")).click();
sleep(3000);
File file = ((TakesScreenshot) webDriver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(file,new File("D:\\測(cè)試上傳代碼記錄\\測(cè)試Gitee代碼上傳\\test-the-code-and-images\\測(cè)試截圖圖片\\20230728.png"));
}
}
結(jié)果展示:
?
5.9獲取句柄
獲取句柄是通過(guò)getWindowHandle和getWindowHandles來(lái)進(jìn)行獲取的。
- getWindowHandle:獲取的get打開(kāi)的頁(yè)面窗口的句柄。
- getWindowHandles:是獲取所有窗口的句柄。
我們以獲取百度頁(yè)面中的“新聞”為例。
我們先來(lái)定位一下“新聞”。
代碼展示:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.Set;
import static java.lang.Thread.sleep;
public class Test16 {
public static void main(String[] args) throws InterruptedException {
WebDriver webDriver = new ChromeDriver();
webDriver.get("https://www.baidu.com");
webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
sleep(3000);
//通過(guò)getWindowHandles獲取所有窗口句柄。
//通過(guò)getWindowHandle獲取的get打開(kāi)的頁(yè)面窗口句柄。
System.out.println(webDriver.getWindowHandle());
Set<String> handles = webDriver.getWindowHandles();
//獲取到最后一個(gè)打開(kāi)的窗口的句柄
String target_handle = "";
for (String handle : handles) {
target_handle = handle;
}
//讓驅(qū)動(dòng)器跳轉(zhuǎn)到當(dāng)前窗口的句柄
webDriver.switchTo().window(target_handle);
sleep(3000);
webDriver.findElement(By.cssSelector("#ww")).sendKeys("新聞聯(lián)播");
webDriver.findElement(By.cssSelector("#s_btn_wr")).click();
}
}
結(jié)果展示:
通過(guò)學(xué)習(xí)如何獲取句柄之后,我們?cè)趤?lái)演示一下quit和close,這樣就可以更加深刻的體會(huì)到它兩的區(qū)別了。
代碼展示:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.Set;
import static java.lang.Thread.sleep;
public class Test17 {
public static void main(String[] args) throws InterruptedException {
WebDriver webDriver = new ChromeDriver();
webDriver.get("https://www.baidu.com");
webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
sleep(3000);
//關(guān)閉整個(gè)瀏覽器
// webDriver.quit();
//關(guān)閉當(dāng)前的頁(yè)面,get方法獲取到哪一個(gè)瀏覽器的頁(yè)面,此時(shí)關(guān)閉的就是哪一個(gè)
//獲取到打開(kāi)窗口的句柄
Set<String> handles = webDriver.getWindowHandles();
//獲取到打開(kāi)的最后一個(gè)窗口的句柄
String target_handle = "";
for (String handle : handles) {
target_handle = handle;
}
//讓驅(qū)動(dòng)器跳轉(zhuǎn)到當(dāng)前的窗口頁(yè)面
webDriver.switchTo().window(target_handle);
// webDriver.quit();
webDriver.close();
}
}
結(jié)果展示:
由于是動(dòng)態(tài)效果所以大家自己下去運(yùn)行一下代碼。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-616629.html
結(jié)束語(yǔ):
好了這節(jié)小編就與大家分享到這里啦!這節(jié)中小編主要是給大家分享了selenium的一些基本的操作,希望這節(jié)對(duì)大家學(xué)習(xí)自動(dòng)化測(cè)試有一定的幫助,下節(jié)中小編將重點(diǎn)給大家介紹一下Junit里的一些操作,想要學(xué)習(xí)的同學(xué)記得關(guān)注小編和小編一起學(xué)習(xí)吧!如果文章中有任何錯(cuò)誤也歡迎各位大佬及時(shí)為小編指點(diǎn)迷津(在此小編先謝過(guò)各位大佬啦!)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-616629.html
到了這里,關(guān)于自動(dòng)化測(cè)試 selenium(測(cè)試系列7)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!