目錄
一、什么是自動(dòng)化測(cè)試
二、Selenium介紹
1、Selenium是什么
2、Selenium的原理
三、了解Selenium的常用API
1、webDriver API??
1.1、元素定位
1.1.1、CSS選擇器
1.1.2、Xpath元素定位
1.1.3、面試題
?1.2、操作測(cè)試對(duì)象
1.3、添加等待?
1.4、打印信息
?1.5、瀏覽器的操作
1.6、鍵盤事件
1.7、鼠標(biāo)事件?
1.8、定位一組元素
1.9、多層框架/窗口定位
1.10、下拉框處理
1.11、彈窗處理
1.12、上傳文件操作
1.13、關(guān)閉瀏覽器操作
1.14、窗口的切換
1.15、截圖?
一、什么是自動(dòng)化測(cè)試
自動(dòng)化測(cè)試指軟件測(cè)試的自動(dòng)化,自預(yù)設(shè)下運(yùn)行應(yīng)用程序或者系統(tǒng),預(yù)設(shè)條件包括正常和異常,最后評(píng)估運(yùn)行結(jié)果。將認(rèn)為驅(qū)動(dòng)的測(cè)試行為轉(zhuǎn)化為機(jī)器執(zhí)行的過程。
?自動(dòng)化測(cè)試包括UI自動(dòng)化、接口自動(dòng)化、單元測(cè)試自動(dòng)化。按照這個(gè)金字塔模型來進(jìn)行自動(dòng)化測(cè)試規(guī)劃,可以產(chǎn)生最佳的自動(dòng)化測(cè)試產(chǎn)出投入比,可以用較少的投入獲得很好的收益。
?單元測(cè)試
最大的投入應(yīng)再單元測(cè)試上、單元測(cè)試運(yùn)行的頻率也更加高
Java的單元測(cè)試框架是Junit
?接口自動(dòng)化
接口測(cè)試就是API測(cè)試,相對(duì)于UI自動(dòng)化API自動(dòng)化更加容易實(shí)現(xiàn)、執(zhí)行起來也更穩(wěn)定。
接口自動(dòng)化有以下特點(diǎn)
- 可在產(chǎn)品前期,接口完成后介入
- 用例維護(hù)量小
- 適合接口變動(dòng)較小,界面變動(dòng)頻繁的項(xiàng)目
?UI自動(dòng)化
雖然測(cè)試金字塔告訴我們盡量多做API層的自動(dòng)化測(cè)試,但是UI層的自動(dòng)化測(cè)試更加貼近用戶的需求和軟件系統(tǒng)的實(shí)際業(yè)務(wù)。并且有時(shí)候我們不得不進(jìn)行UI層的測(cè)試。
UI自動(dòng)化的特點(diǎn)
- 用例維護(hù)量大
- 頁面相關(guān)性強(qiáng)、必須后期項(xiàng)目頁面開發(fā)完成之后介入
- UI測(cè)試適合與界面變動(dòng)較小的項(xiàng)目。
二、Selenium介紹
1、Selenium是什么
Selenium是用來做web自動(dòng)化測(cè)試的框架。Selenium提供了多種編程語言的綁定,包括Python、Java、C#、JavaScript等,使開發(fā)人員能夠使用自己熟悉的編程語言來編寫自動(dòng)化腳本。它還支持各種瀏覽器(Edge、Chrome),支持各種平臺(tái)(Linux、Windows、Mac),具有豐富的API。
2、Selenium的原理
自動(dòng)化腳本代碼、瀏覽器驅(qū)動(dòng)和瀏覽器之間的關(guān)系是,自動(dòng)化腳本代碼向?yàn)g覽器驅(qū)動(dòng)發(fā)起請(qǐng)求,驅(qū)動(dòng)操控瀏覽器執(zhí)行測(cè)試步驟,最終瀏覽器將結(jié)果返回給驅(qū)動(dòng),驅(qū)動(dòng)最終再將結(jié)果返回給自動(dòng)化程序。
三、了解Selenium的常用API
先來看一個(gè)完整的瀏覽器搜索框的測(cè)試
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 Main {
public static void main(String[] args) throws InterruptedException {
int flag = 0;
//創(chuàng)建ChromeOptions對(duì)象,用于配置Chrome瀏覽器啟動(dòng)選項(xiàng)
ChromeOptions options = new ChromeOptions();
//允許所有請(qǐng)求
options.addArguments("--remote-allow-origins=*");
//創(chuàng)建Chrome引擎對(duì)象
WebDriver webDriver = new ChromeDriver();
//打開百度首頁
webDriver.get("https://www.baidu.com");
//找到百度搜索輸入框
WebElement element = webDriver.findElement(By.xpath("http://*[@id=\"kw\"]"));
//輸入"軟件測(cè)試(要搜索的內(nèi)容)"
element.sendKeys("軟件測(cè)試");
//找到百度一下按鈕,實(shí)現(xiàn)點(diǎn)擊
webDriver.findElement(By.cssSelector("#su")).click();
//這里添加休眠函數(shù)是為了更清楚的觀察
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è)試通過,否則測(cè)試不通過
if(elements.get(i).getText().equals("軟件測(cè)試")){
flag = 1;
System.out.println("測(cè)試通過");
break;
}
}
if(flag == 0){
System.out.println("測(cè)試不通過");
}
}
}
?這里getText()方法表示獲取特定元素的文本內(nèi)容。get().getText(),返回你所選擇的元素的純文本內(nèi)容,不包括HTML標(biāo)簽。
1、webDriver API??
1.1、元素定位
1.1.1、CSS選擇器
?使用到的方法
方法 | 作用 |
findElement() | 找到一個(gè)元素 |
findElements() | 找到一批元素 |
By.cssSelector() | 表示通過css選擇器查找元素,這個(gè)方法用在findElement()方法中作為參數(shù)。 |
sendKeys() | 模擬用戶在輸入框中輸入文本、按鍵、組合鍵等操作。參數(shù)可以是字符串、鍵盤按鍵、鍵盤組合鍵等。 |
getText() | 獲取特定元素的文本內(nèi)容 |
獲取class屬性值可以通過瀏覽器的f12鍵找到一個(gè)頁面的源碼。
1??上述是通過class的方式復(fù)制內(nèi)容。
2??我們也可以點(diǎn)到輸入框的源碼位置,單擊鼠標(biāo)右鍵,使用css選擇器的方式定位輸入框,這里復(fù)制到的內(nèi)容是id屬性的值。兩種方式獲取的屬性值是不同的,是通過不同的方式(屬性)定位到輸入框的。
?程序
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;
public class Test {
public static void main(String[] args) {
//啟動(dòng)Chrome
ChromeOptions options = new ChromeOptions();
//允許所有請(qǐng)求
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver = new ChromeDriver(options);
//打開百度首頁
webDriver.get("https://www.baidu.com");
//找到百度搜索輸入框(通過css選擇器找到輸入框,這里是通過class屬性值定位到的)
WebElement element = webDriver.findElement(By.cssSelector(".s_ipt"));
//輸入軟件測(cè)試
element.sendKeys("軟件測(cè)試");
}
}
?結(jié)果
1.1.2、Xpath元素定位
WebElement element = webDriver.findElement(By.xpath("http://*[@id=\"kw\"]"));
結(jié)果:
1.1.3、面試題
1、css選擇器和Xpath選擇器的常見語法有哪些??
?CSS選擇器:
- 標(biāo)簽選擇器:通過標(biāo)簽名來進(jìn)行定位。語法格式為“標(biāo)簽名”。例如"input"。
- id選擇器:通過元素的id屬性值來定位對(duì)應(yīng)的元素。語法格式"#id值",例如"#kw".
- 類選擇器:通過元素的class屬性值來定位對(duì)應(yīng)的元素。語法格式".class值",例如:".s_ipt"。
- 后代選擇器:通過空格分隔的兩個(gè)元素標(biāo)簽來定位對(duì)應(yīng)的元素。語法格式"父級(jí)選擇器?子級(jí)選擇器"。例如:"form input".
?Xpath選擇器:
- 絕對(duì)路徑:/html/head/title(絕對(duì)路徑的效率非常低,所以不常用)
- 相對(duì)路徑:
- 相對(duì)路徑+索引://form[索引值]/span[索引值]/input (這里的索引如果不寫,默認(rèn)是從1開始。一個(gè)頁面中存在多個(gè)相同的標(biāo)簽,這個(gè)時(shí)候使用索引,表示路徑中的標(biāo)簽是頁面中的第幾個(gè),或者是某個(gè)標(biāo)簽(form)下的第幾個(gè)標(biāo)簽(input)).
- 相對(duì)路徑+屬性值://input[@calss="s_ipt"]。
- 相對(duì)路徑+通配符://*[@*=s_ipt]。表示將所有標(biāo)簽下的所有屬性值為s_ipt的屬性找到。
- 相對(duì)路徑+文本匹配://a[text()="新聞"]
?2、css選擇器和Xpath選擇器你覺得那個(gè)更好?
CSS選擇器和Xpath選擇器都有各自的優(yōu)點(diǎn),沒有絕對(duì)的好會(huì)之分,二者在不同的場(chǎng)景下各有優(yōu)勢(shì)
- CSS選擇器在Chrome、火狐等瀏覽器中查找速度快、效率高,語法更簡潔,在處理簡單元素的查找時(shí)更推薦使用。
- Xpath選擇器功能更強(qiáng)大,可以通過包括和排除操作符進(jìn)行元素集合運(yùn)算,也可以選擇元素的足心和后代,還支持正則表達(dá)式和序列運(yùn)算。
?1.2、操作測(cè)試對(duì)象
方法 | 作用 |
click | 點(diǎn)擊對(duì)象 |
sendKeys | 模擬用戶在輸入框中輸入文本、按鍵、組合鍵等操作 |
submit | 提交 |
text | 用于獲取元素的文本信息 |
getAttribute | 獲取屬性 |
clear | 清楚對(duì)象輸入的文本內(nèi)容 |
?sendKeys、click和clear方法的使用
private static void test01() throws InterruptedException {
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver = new ChromeDriver(options);
webDriver.get("http://www.baidu.com/");
sleep(2000);
//找到百度輸入框,輸入"美食"
webDriver.findElement(By.cssSelector("#kw")).sendKeys("美食");
sleep(2000);
//點(diǎn)擊百度一下按鈕
webDriver.findElement(By.cssSelector("#su")).click();
sleep(2000);
//清空百度搜索輸入框
webDriver.findElement(By.cssSelector("#kw")).clear();
}
由于這里的操作是連續(xù)的,小編不會(huì)插入動(dòng)圖,這里就展示最終的效果。
?submit的使用
在上述代碼中可以將click方法替換成submit方法,最終實(shí)現(xiàn)的效果是相同的。
webDriver.findElement(By.cssSelector("#su")).submit();
但是使用submit方法,存在一定的條件。如果點(diǎn)擊的元素放在form標(biāo)簽中,此時(shí)使用submit實(shí)現(xiàn)的效果和click是一樣的,如果點(diǎn)擊的元素放在非form標(biāo)簽中,此時(shí)使用submit會(huì)報(bào)錯(cuò)。
??getAttribute方法的使用
private static void test03(){
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è)試通過");
}else{
System.out.println(button_value);
System.out.println("測(cè)試不通過");
}
}
這里獲取到了"百度一下"這個(gè)文本信息,但是有的老鐵就會(huì)產(chǎn)生疑問使用getText()方法也可以得到文本信息,為什么使用getAttribute來獲取。
?我們使用getText()方法獲取文本信息,只能是獲取標(biāo)簽中間的文本信息。
1.3、添加等待?
1、強(qiáng)制等待(sleep)
2、智能等待(隱式等待、顯示等待)
假設(shè)設(shè)置等待時(shí)間為3天
強(qiáng)制等待就會(huì)一直等待,等待時(shí)間為3天
隱式等待,最長等待3天時(shí)間,如果在三天之內(nèi)獲取頁面上的元素,此時(shí)就會(huì)執(zhí)行下面的程序,如果等待三天還是沒有找到這個(gè)元素,就會(huì)報(bào)錯(cuò)。
強(qiáng)制等待:
隱式等待:
private static void test01() throws InterruptedException {
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver = new ChromeDriver(options);
webDriver.get("https://www.baidu.com/");
sleep(2000);
//找到百度輸入框,輸入"美食"
webDriver.findElement(By.cssSelector("#kw")).sendKeys("美食");
//點(diǎn)擊百度一下按鈕
webDriver.findElement(By.cssSelector("#su")).submit();
//隱式等待
webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.DAYS);
//清空百度搜索輸入框
webDriver.findElement(By.cssSelector("#kw")).clear();
}
?顯示等待:
private static void test04(){
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver = new ChromeDriver(options);
webDriver.get("https://www.baidu.com/");
//等待2秒,等待頁面加載完成
WebDriverWait wait = new WebDriverWait(webDriver,2);
//等待元素加載完成并執(zhí)行操作
wait.until(ExpectedConditions.titleIs("百度一下,你就知道"));
}
顯示等待和隱式等待的區(qū)別
1、作用范圍:隱式等待是全局性的等待設(shè)置,適用于整體頁面的元素定位操作;顯示等待是針對(duì)特定元素或條件的等待設(shè)置,更具體、可定制性更強(qiáng)。
2、等待時(shí)間:隱式等待直選喲設(shè)置一次,并適用于所有元素的定位操作;顯示等待可以根據(jù)不同情況設(shè)定不同的等待時(shí)間。
3、等待條件:隱式等待沒有明確的等待條件,只要在規(guī)定的時(shí)間內(nèi)找到元素即可;顯示等待可以指定等待元素可見、可點(diǎn)擊等待特定條件。
4、操作方式:隱式等待是自動(dòng)等待的,不需要再代碼中顯示調(diào)用;顯示等待需要再代碼中顯示調(diào)用等待方法。
1.4、打印信息
打印title和url
private static void test05() {
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)前頁面url:"+url+",當(dāng)前頁面title:"+title);
System.out.println("測(cè)試通過");
}else{
System.out.println("測(cè)試不通過");
}
}
?1.5、瀏覽器的操作
操作 | 說明 |
browser.maxmize_window() | 瀏覽器窗口最大化 |
browser.set_window_size(width,hight) | 設(shè)置瀏覽器寬、高 |
browser.forward() | 瀏覽器的前進(jìn) |
browser.back() | 瀏覽器的后退 |
document.documentElement.scrollTop=0 | 將瀏覽器滾動(dòng)條滑動(dòng)到最頂端 |
document.documentElement.scrollTop=10000 | 將瀏覽器滾動(dòng)條滑動(dòng)到最低端 |
?這個(gè)代碼演示了瀏覽器的前進(jìn)、后退、刷新操作。但是介于小編不會(huì)使用動(dòng)圖,所以就不添加執(zhí)行結(jié)果了。
private static void test07() throws InterruptedException {
WebDriver webDriver = new ChromeDriver();
//打開百度首頁
webDriver.get("https://www.baidu.com/");
//搜索521
webDriver.findElement(By.cssSelector("#kw")).sendKeys("521");
//點(diǎn)擊百度一下
webDriver.findElement(By.cssSelector("#su")).click();
sleep(3000);
//瀏覽器后退
webDriver.navigate().back();
//強(qiáng)制等待3秒
sleep(3000);
//瀏覽器刷新
webDriver.navigate().refresh();
//瀏覽器前進(jìn)
sleep(3000);
webDriver.navigate().forward();
}
瀏覽器的滾動(dòng)條
private static void test08() throws InterruptedException {
WebDriver webDriver = new ChromeDriver();
//打開百度首頁
webDriver.get("https://www.baidu.com/");
//搜索521
webDriver.findElement(By.cssSelector("#kw")).sendKeys("521");
//點(diǎn)擊百度一下
webDriver.findElement(By.cssSelector("#su")).click();
sleep(3000);
webDriver.navigate().forward();
sleep(3000);
//滾動(dòng)條到結(jié)尾
((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000");
}
?窗口的最大化、窗口的全屏化、設(shè)置窗口大小
private static void test08() throws InterruptedException {
WebDriver webDriver = new ChromeDriver();
//打開百度首頁
webDriver.get("https://www.baidu.com/");
//搜索521
webDriver.findElement(By.cssSelector("#kw")).sendKeys("521");
//點(diǎn)擊百度一下
webDriver.findElement(By.cssSelector("#su")).click();
sleep(3000);
((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000");
sleep(3000);
//瀏覽器窗口最大化
webDriver.manage().window().maximize();
sleep(3000);
//瀏覽器全屏化
webDriver.manage().window().fullscreen();
sleep(3000);
//設(shè)置瀏覽器窗口大小
webDriver.manage().window().setSize(new Dimension(600,800));
}
1.6、鍵盤事件
操作 | 說明 |
sendKeys(Keys.TAB) | #TAB |
sendKeys(Keys.ENTER) | #回車 |
sendKeys(Keys.SPACE) | #空格鍵 |
sendKeys(Keys.ESCAPE) | #回退鍵(ESC) |
sendKeys(Keys.CONTROL,'a') | #全選(Ctrl+A) |
sendKeys(Keys.CONTROL,'c') | #復(fù)制(Ctrl+C) |
sendKeys(Keys.CONTROL,'x') | #剪切(Ctrl+x) |
sendKeys(Keys.CONTROL,'v') | #粘貼(Ctrl+v) |
private static void test09() throws InterruptedException {
WebDriver webDriver = new ChromeDriver();
//打開百度首頁
webDriver.get("https://www.baidu.com/");
//搜索521
webDriver.findElement(By.cssSelector("#kw")).sendKeys("521");
//ctrl+a
webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"a");
sleep(3000);
//ctrl+x
webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"x");
sleep(3000);
//ctrl+v
webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"v");
sleep(3000);
}
1.7、鼠標(biāo)事件?
操作 | 說明 |
context_click() | 右擊 |
double_dlick() | 雙擊 |
drag_and_drop() | 拖動(dòng) |
move_to_element() | 移動(dòng) |
private static void test09() throws InterruptedException {
WebDriver webDriver = new ChromeDriver();
webDriver.get("https://www.baidu.com/");
webDriver.findElement(By.cssSelector("#kw")).sendKeys("520");
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-pic_p4Uej.s-tab-pic"));
// 鼠標(biāo)右擊出現(xiàn)框
Actions actions = new Actions(webDriver);
sleep(3000);
//contextClick()右擊鼠標(biāo)
actions.moveToElement(webElement).contextClick().perform();
}
1.8、定位一組元素
findElements示例,將頁面上所有的checkbox都勾選上。
private static void page01() {
WebDriver webDriver = new ChromeDriver();
webDriver.get("http://localhost:63342/_20230925testcode/src/main/Page/test01.html?_ijt=hk3glm0bcb2222roak6kf4826i&_ij_reload=RELOAD_ON_SAVE");
webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.DAYS);
List<WebElement> webElements = webDriver.findElements(By.cssSelector("input"));
for(int i = 0; i < webElements.size(); i++) {
// 如果每個(gè)元素type值等于checkbox進(jìn)行點(diǎn)擊
// getAttribute獲取頁面上的元素屬性值,里面的type是當(dāng)前元素屬性
if(webElements.get(i).getAttribute("type").equals("checkbox")){
webElements.get(i).click();
} else {
// 否則什么也不操作
;
}
}
}
1.9、多層框架/窗口定位
對(duì)于一個(gè)web應(yīng)用,經(jīng)常會(huì)出現(xiàn)框架或窗口的應(yīng)用,這也就給我們的定位帶來了一定的困難。
- 定位一個(gè)frame:switch_to.frame(name_or_id_or_frame_element)
- 定位一個(gè)窗口window:switch_to.window(name_or_id_or_frame_element)
private static void page02() {
WebDriver webDriver = new ChromeDriver();
webDriver.get("http://localhost:63342/_20230925testcode/src/main/Page/test02.html?_ijt=sdck9iv3t1f7l8bv2khvu2k87t&_ij_reload=RELOAD_ON_SAVE");
webDriver.switchTo().frame("f1");
webDriver.findElement(By.cssSelector("body > div > div > a")).click();
}
1.10、下拉框處理
通過Index
和Value
來選擇演示:
private static void page03() {
WebDriver webDriver = new ChromeDriver();
webDriver.get("http://localhost:63342/_20230925testcode/src/main/Page/test03.html?_ijt=ibu1q228hs9l4q026vbbfjp8r3&_ij_reload=RELOAD_ON_SAVE");
WebElement webElement = webDriver.findElement(By.cssSelector("#ShippingMethod"));
Select select = new Select(webElement);
//通過下標(biāo)來選擇
// select.selectByIndex(3);
//通過value值來選擇
select.selectByValue("12.51");
}
1.11、彈窗處理
private static void test10() throws InterruptedException {
WebDriver webDriver = new ChromeDriver();
webDriver.get("http://localhost:63342/_20230925testcode/src/main/Page/test04.html?_ijt=bv9np3tl8gm9kv04oam7i2sfij&_ij_reload=RELOAD_ON_SAVE");
webDriver.findElement(By.cssSelector("button")).click();
sleep(3000);
//alert彈窗取消
webDriver.switchTo().alert().dismiss();
sleep(3000);
//點(diǎn)擊按鈕
webDriver.findElement(By.cssSelector("button")).click();
//在alert彈窗中輸入”張三“
webDriver.switchTo().alert().sendKeys("張三");
//alert彈窗確認(rèn)
sleep(3000);
webDriver.switchTo().alert().accept();
}
1.12、上傳文件操作
private static void test11() {
WebDriver webDriver = new ChromeDriver();
webDriver.get("http://localhost:63342/_20230925testcode/src/main/Page/test05.html?_ijt=16g56va44mth0ok9g9lfkdqj32&_ij_reload=RELOAD_ON_SAVE");
webDriver.findElement(By.cssSelector("input")).sendKeys("E:\\360MoveData\\Users\\26542\\Desktop\\圖片");
}
1.13、關(guān)閉瀏覽器操作
關(guān)閉瀏覽器的操作有兩種,quit()方法和close()方法
quit方法:我們以百度的新聞連接為例,進(jìn)行說明
private static void test12() 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(4000);
webDriver.quit();
}
close()方法:還是以百度的新聞連接為例,進(jìn)行說明
private static void test12() 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(4000);
webDriver.close();
}
?新聞頁打開之后,之前get方法打開的百度首頁被關(guān)閉。
注意:兩個(gè)方法quit()和close()之間的區(qū)別
- quit方法關(guān)閉了整個(gè)瀏覽器,close關(guān)閉當(dāng)前頁面。(這里的當(dāng)前頁面是指被操作的頁面。)
- quit方法會(huì)清空緩存、close不會(huì)清空緩存
1.14、窗口的切換
先來看一下錯(cuò)誤的代碼示范
private static void test13() throws InterruptedException {
WebDriver webDriver = new ChromeDriver();
//打開百度首頁
webDriver.get("https://baidu.com/");
//跳轉(zhuǎn)到新聞連接的頁面
webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
sleep(3000);
//找到新聞頁面中的搜索框,然后輸入"新聞聯(lián)播"
webDriver.findElement(By.cssSelector("#ww")).sendKeys("新聞聯(lián)播");
//在新聞頁面中找到點(diǎn)一下按鈕,點(diǎn)擊
webDriver.findElement(By.cssSelector("#s_btn_wr")).click();
}
這是因?yàn)楝F(xiàn)在的代碼默認(rèn)獲取get方法打開的頁面中的這些元素,我們?cè)谶@里要獲取的是另一個(gè)頁面的元素,所以就會(huì)獲取不到。就會(huì)報(bào)錯(cuò)。
這個(gè)時(shí)候我們就需要使用getWindowHandles方法來獲取所有窗口的句柄。
方法 | 說明 |
getWindowHandles()方法 | 獲取所有窗口的句柄 |
getWindowHandles()方法 | 獲取get打開的頁面窗口句柄 |
private static void test13() throws InterruptedException {
WebDriver webDriver = new ChromeDriver();
webDriver.get("https://baidu.com/");
webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
sleep(3000);
//獲取所有頁面的窗口句柄
Set<String> handles = webDriver.getWindowHandles();
String target_handle = "";
for (String handle:handles){
target_handle = handle;
}
//拿到當(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();
}
1.15、截圖?
這里首先需要引入一個(gè)依賴文章來源:http://www.zghlxwxcb.cn/news/detail-796119.html
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
private static void test15() 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);
//強(qiáng)轉(zhuǎn)成截圖對(duì)象
File file = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
//將截圖好的圖片存儲(chǔ)到E://20231005jietu.png路徑下
FileUtils.copyFile(file, new File("E:\\12\\20230521.png"));
}
文章來源地址http://www.zghlxwxcb.cn/news/detail-796119.html
到了這里,關(guān)于【軟件測(cè)試】自動(dòng)化測(cè)試selenium的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!