国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

自動(dòng)化測(cè)試 selenium(測(cè)試系列7)

這篇具有很好參考價(jià)值的文章主要介紹了自動(dòng)化測(cè)試 selenium(測(cè)試系列7)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

前言:

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è)試。

自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(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)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具

  • 自動(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ì)看下面:

  1. 首先由我們的代碼將請(qǐng)求發(fā)送給中間的媒介(webdriver).
  2. 這是webdriver就將代碼里面的意思解析一下,解析成瀏覽器能夠識(shí)別的,然后發(fā)送給瀏覽器。
  3. 最后由瀏覽器執(zhí)行發(fā)來(lái)的請(qǐng)求。
  4. 瀏覽器在執(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)容都有以下的文件,大家先檢查自己的是否和小編的一樣。

自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具

如果上述是和小編的一樣,那么接下來(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)搭建好了。

自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具

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定位的。

自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具那么為了防止速度太快這里我們加上一個(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é)果展示:

自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具??

5.1.2id選擇器

id是頁(yè)面元素的屬性,我們最常用元素定位方式,但是不是所有的元素都有id的,如果一個(gè)元素有屬性,那么一般在整個(gè)頁(yè)面是唯一的,所以我們一般可以用id來(lái)唯一的定位到這個(gè)元素。

我們是通過(guò)前端工具,例如Chrome瀏覽器的F12,在上述中我們也用到了,找到百度輸入框的屬性信息,如下:

自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具

屬性: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)定位的。

自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具

自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具

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),如下圖所示:

自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具

點(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自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具
  • 相對(duì)路徑 +?屬性值://input[@class = "s_ipt"]自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具
  • 相對(duì)路徑 +?通配符://*[@*="su"]自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具
  • 相對(duì)路徑 +?文本匹配://a[text() = "百度首頁(yè)"]自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具

那么這里我們就可以在加一個(gè)對(duì)測(cè)試結(jié)果的校驗(yàn),我們需要查找的東西有沒(méi)有給我們找到。那么在這里我們是查找有關(guān)于軟件測(cè)試,那么我們就直接查看“測(cè)試”這兩字樣。

首先我們先來(lái)查看對(duì)應(yīng)頁(yè)面上的標(biāo)簽的位置。

自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具

那么我們就通過(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é)果展示:

自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具

總結(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ò)多的展示了。

自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具

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é)果展示:
自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具

有關(guān)于getCurrentUrl和getTitle的演示:

自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具

代碼展示:

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é)果展示:

自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具

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中跑一下代碼。

自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具

隱式等待和顯示等待的區(qū)別:

  • 隱式等待等待的是所有元素。
  • 顯示等待等待的是一定的條件。?

5.5.2瀏覽器滾動(dòng)條的操作

①首先我們現(xiàn)在百度中隨便搜索一個(gè)東西,例如下面。

自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具

②此時(shí)我們點(diǎn)擊F12,來(lái)到Console。

自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具

③接著在下面輸入一下內(nèi)容,然后回車(chē)。

自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具

④查看滾動(dòng)條是否來(lái)到低端。

自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具

代碼展示:

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é)果展示:

自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具

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é)果展示:

自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具

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é)果展示:

自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具

5.7鼠標(biāo)事件

這里我們先在瀏覽器界面中找到一個(gè)圖片并右擊鼠標(biāo),并用F12來(lái)查看圖片的地址。

自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(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.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é)果展示:

自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具

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è)面中的“新聞”為例。

自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具

我們先來(lái)定位一下“新聞”。

自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具

代碼展示:

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é)果展示:

自動(dòng)化測(cè)試 selenium(測(cè)試系列7),測(cè)試,selenium,測(cè)試工具

通過(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)行一下代碼。

結(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)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • python自動(dòng)化測(cè)試工具selenium

    selenium 是網(wǎng)頁(yè)應(yīng)用中最流行的自動(dòng)化測(cè)試工具,可以用來(lái)做自動(dòng)化測(cè)試或者瀏覽器爬蟲(chóng)等。官網(wǎng)地址為:Selenium。相對(duì)于另外一款web自動(dòng)化測(cè)試工具QTP來(lái)說(shuō)有如下優(yōu)點(diǎn): 免費(fèi)開(kāi)源輕量級(jí),不同語(yǔ)言只需要一個(gè)體積很小的依賴包 支持多種系統(tǒng),包括Windows,Mac,Linux 支持多種瀏

    2024年02月08日
    瀏覽(26)
  • 如何使用Python自動(dòng)化測(cè)試工具Selenium進(jìn)行網(wǎng)頁(yè)自動(dòng)化?

    如何使用Python自動(dòng)化測(cè)試工具Selenium進(jìn)行網(wǎng)頁(yè)自動(dòng)化?

    Selenium 是一個(gè)流行的Web自動(dòng)化測(cè)試框架, 它支持多種編程語(yǔ)言和瀏覽器,并提供了豐富的API和工具來(lái)模擬用戶在瀏覽器中的行為 。 Selenium可以通過(guò)代碼驅(qū)動(dòng)瀏覽器自動(dòng)化測(cè)試流程,包括頁(yè)面導(dǎo)航、元素查找、數(shù)據(jù)填充、點(diǎn)擊操作等。 與PyAutoGUI和AutoIt相比, Selenium更適合于處

    2023年04月09日
    瀏覽(111)
  • 自動(dòng)化測(cè)試工具selenium的安裝方法

    一、什么是selenium Selenium 是一套 Web網(wǎng)站 的程序自動(dòng)化操作 解決方案。 通過(guò)它,我們可以寫(xiě)出自動(dòng)化程序,像人一樣在瀏覽器里操作web界面。 比如點(diǎn)擊界面按鈕,在文本框中輸入文字 等操作。 Selenium 通過(guò)使用? WebDriver ?支持市場(chǎng)上所有主流瀏覽器的自動(dòng)化。 Webdriver 是一個(gè)

    2024年02月09日
    瀏覽(30)
  • 自動(dòng)化測(cè)試工具Selenium的語(yǔ)法續(xù).

    自動(dòng)化測(cè)試工具Selenium的語(yǔ)法續(xù).

    OK,那么上篇博客我們介紹了如何搭建基于Java+selenium的環(huán)境,并且使用selenium的一些語(yǔ)法給大家演示了如何進(jìn)行自動(dòng)化測(cè)試的案例,那么本篇博客我們來(lái)繼續(xù)學(xué)習(xí)selenium的一些其他的比較重要的語(yǔ)法,感謝關(guān)注,期待三連~ 目錄 一、定位一組元素 二、下拉框處理 三、上傳文件

    2024年02月10日
    瀏覽(32)
  • Selenium教程:自動(dòng)化瀏覽器測(cè)試工具

    Selenium教程:自動(dòng)化瀏覽器測(cè)試工具

    Selenium是一款用于自動(dòng)化瀏覽器測(cè)試的工具,它提供了一系列的API和功能,使得開(kāi)發(fā)人員可以編寫(xiě)腳本來(lái)模擬用戶在瀏覽器中的行為。無(wú)論是在Web應(yīng)用程序的功能測(cè)試、性能測(cè)試還是數(shù)據(jù)抓取方面,Selenium都是一個(gè)強(qiáng)大且廣泛使用的工具。 在開(kāi)始使用Selenium之前,您需要進(jìn)行安

    2024年02月07日
    瀏覽(201)
  • Web測(cè)試自動(dòng)化工具Selenium的使用

    Selenium是一個(gè)Web應(yīng)用測(cè)試的自動(dòng)化工具,它通過(guò)模擬點(diǎn)擊實(shí)現(xiàn)對(duì)Web應(yīng)用的功能測(cè)試。測(cè)試時(shí),除了Selenium,還需要對(duì)應(yīng)的瀏覽器驅(qū)動(dòng),如在Chrome實(shí)現(xiàn)自動(dòng)點(diǎn)擊,則需要chromedriver。 Selenium支持多種語(yǔ)言和多種瀏覽器,本文僅記錄python+chrome的使用。 1. 安裝python 略 2. 安裝Selenium 注

    2024年01月16日
    瀏覽(95)
  • 自動(dòng)化測(cè)試工具-Selenium:Selenium的核心三大組件詳解

    自動(dòng)化測(cè)試工具-Selenium:Selenium的核心三大組件詳解

    目錄 1. WebDriver 1.1 WebDriver的通信方式 1.2 WebDriver的功能 1.3 W3C推薦標(biāo)準(zhǔn) 2. Grid 3. IDE Selenium 是支持 web 瀏覽器自動(dòng)化的一系列工具和庫(kù)的綜合項(xiàng)目。官方對(duì)Selenium認(rèn)可的三大組件或API分別是: WebDriver、Selenium IDE、Grid。 其中,WebDriver又被稱為Selenium的核心。 下面本篇文章將深度介

    2024年02月03日
    瀏覽(52)
  • 學(xué)會(huì)自動(dòng)化必備工具-Selenium-再想著入坑自動(dòng)化測(cè)試吧

    學(xué)會(huì)自動(dòng)化必備工具-Selenium-再想著入坑自動(dòng)化測(cè)試吧

    隨著近些年IT行業(yè)的發(fā)展,軟件測(cè)試人才的需求越來(lái)越大,也有很多小伙伴在考慮入坑,而軟件測(cè)試中,收入相對(duì)較高的就是自動(dòng)化了,所以這次就專門(mén)為大家簡(jiǎn)單介紹下自動(dòng)化測(cè)試的必備工具Selenium。 Selenium是一款基于Web應(yīng)用程序的開(kāi)源測(cè)試工具 ,直接運(yùn)行在瀏覽器中,支

    2024年01月23日
    瀏覽(35)
  • 自動(dòng)化測(cè)試工具之Selenium IDE錄制教程

    自動(dòng)化測(cè)試工具之Selenium IDE錄制教程

    ? ? ? ? 下載傳送帶:Selenium IDE · Open source record and playback test automation for the web ? ? ? ? 這里Darren洋以firefox火狐瀏覽器為例,將以上下載url直接在firefox瀏覽器中打開(kāi),點(diǎn)擊對(duì)應(yīng)下載按鈕后,就會(huì)進(jìn)入添加頁(yè)面。 ? ? ? ? 這里直接點(diǎn)擊添加到Firefox瀏覽器的按鈕即可,谷歌瀏

    2024年02月08日
    瀏覽(21)
  • Python自動(dòng)化測(cè)試工具selenium使用指南

    Python自動(dòng)化測(cè)試工具selenium使用指南

    概述 selenium 是網(wǎng)頁(yè)應(yīng)用中最流行的自動(dòng)化測(cè)試工具,可以用來(lái)做自動(dòng)化測(cè)試或者瀏覽器爬蟲(chóng)等。官網(wǎng)地址為:相對(duì)于另外一款web自動(dòng)化測(cè)試工具QTP來(lái)說(shuō)有如下優(yōu)點(diǎn): 免費(fèi)開(kāi)源輕量級(jí),不同語(yǔ)言只需要一個(gè)體積很小的依賴包 支持多種系統(tǒng),包括Windows,Mac,Linux 支持多種瀏覽器

    2024年02月04日
    瀏覽(80)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包