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

selenium瀏覽器自動(dòng)化測(cè)試【基于java】

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

Selenium入門(mén)

Selenium是一個(gè)用于Web應(yīng)用程序的自動(dòng)化測(cè)試工具。它直接運(yùn)行在瀏覽器中,可以模擬用戶(hù)在瀏覽器上面的行為操作。

chrome.exe

默認(rèn)安裝位置:C:\Program Files\Google\Chrome\Application\chrome.exe

結(jié)果我的在:C:\Users\91073\AppData\Local\Google\Chrome\Application\chrome.exe

。。。為啥?


下載驅(qū)動(dòng)

最新版:Chrome for Testing availability

查看谷歌瀏覽器版本

谷歌瀏覽器輸入網(wǎng)址的地方輸入:chrome://version

下載與瀏覽器對(duì)應(yīng)(或相近)版本的瀏覽器驅(qū)動(dòng):http://chromedriver.storage.googleapis.com/index.html

>chrome.exe --disable-remote-words-auto-upgrade --version,selenium,java,測(cè)試工具

?備用地址:CNPM Binaries Mirror

>chrome.exe --disable-remote-words-auto-upgrade --version,selenium,java,測(cè)試工具

解壓后得到一個(gè)chromedriver.exe驅(qū)動(dòng)文件


禁用自動(dòng)升級(jí)

關(guān)閉自動(dòng)升級(jí)方法:

1.右鍵單擊【計(jì)算機(jī)】——【管理】——【計(jì)算機(jī)管理本地】——【系統(tǒng)工具】——【任務(wù)計(jì)劃程序】——【任務(wù)計(jì)劃程序庫(kù)】——這里找到兩個(gè)和Google自動(dòng)更新相關(guān)的任務(wù)計(jì)劃【GoogleUpdateTaskMachineCore】與【GoogleUpdateTaskMachineUA】,把這兩個(gè)選項(xiàng)禁用。

>chrome.exe --disable-remote-words-auto-upgrade --version,selenium,java,測(cè)試工具

2.在【服務(wù)和應(yīng)用程序】——【服務(wù)】,這里找到了兩個(gè)和Google更新相關(guān)的服務(wù)【Google更新服務(wù)(gupdate)】、【Google更新服務(wù)(gupdatem)】,右鍵——選擇屬性——啟動(dòng)類(lèi)型禁用即可;


卸載谷歌瀏覽器

在卸載當(dāng)前版本之前,建議備份你的書(shū)簽、擴(kuò)展、密碼等資料。

  1. 通過(guò)Windows?+?R快捷鍵調(diào)出“運(yùn)行”對(duì)話框。
  2. 鍵入APPWIZ.CPL和命中輸入。

>chrome.exe --disable-remote-words-auto-upgrade --version,selenium,java,測(cè)試工具

這將帶您到所有已安裝應(yīng)用程序的列表。從列表中選擇Google Chrome,然后點(diǎn)擊卸載?命令。


降級(jí)版本

版本報(bào)錯(cuò)

Caused by: org.openqa.selenium.SessionNotCreatedException: session not created: This version of ChromeDriver only supports Chrome version 114
Current browser version is 116.0.5845.97 with binary path C:\Users\91073\AppData\Local\Google\Chrome\Application\chrome.exe

Google瀏覽器歷史版本下載地址

Download older versions of Google Chrome for Windows, Linux and Mac

按住alt鍵,雙擊桌面的谷歌瀏覽器桌面圖標(biāo)

>chrome.exe --disable-remote-words-auto-upgrade --version,selenium,java,測(cè)試工具

拷貝目標(biāo)路徑:C:\Users\lenovo\AppData\Local\Google\Chrome\Application\chrome.exe

打開(kāi)命令提示符,輸入如下并回車(chē)鍵;

cd?C:\Users\lenovo\AppData\Local\Google\Chrome\Application

輸入“chrome.exe--disable-remote-words-auto-upgrade--version=版本號(hào)”,然后按回車(chē)鍵。在這里,請(qǐng)將“版本號(hào)”替換為所需的版本號(hào)。


maven坐標(biāo)

打開(kāi)selenium的倉(cāng)庫(kù)地址 :https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java

直接拷貝到pom文件吧,,

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>3.141.5</version>
</dependency>

<!-- 測(cè)試工具testng-->
<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>6.14.3</version>
    <scope>test</scope>
</dependency>

入門(mén)案例

如果瀏覽器驅(qū)動(dòng)未加入環(huán)境變量,那么創(chuàng)建瀏覽器驅(qū)動(dòng)的時(shí)候,需要指定瀏覽器驅(qū)動(dòng)的路徑

public class Client {

    public static void main(String[] args) throws InterruptedException {
        //配置瀏覽器驅(qū)動(dòng)地址
        System.setProperty("webdriver.chrome.driver", "D:\\tools\\chrome\\driver113\\chromedriver.exe");
        //打開(kāi)Chrome瀏覽器
        WebDriver webDriver = new ChromeDriver();
        TimeUnit.SECONDS.sleep(5);
        //打開(kāi)百度網(wǎng)站
        webDriver.get("https://www.baidu.com");
        TimeUnit.SECONDS.sleep(2);
        //輸入框輸入搜索關(guān)鍵詞 selenium 中文官網(wǎng)
        webDriver.findElement(By.id("kw")).sendKeys("selenium 中文官網(wǎng)");
        TimeUnit.SECONDS.sleep(2);
        //點(diǎn)擊百度一下按鈕
        webDriver.findElement(By.id("su")).submit();
        TimeUnit.SECONDS.sleep(2);
        //查詢(xún)所有搜索的結(jié)果
        List<WebElement> resultElements = webDriver.findElements(By.className("result"));
        if (!resultElements.isEmpty()) {
            //找到第一條結(jié)果的第一個(gè)鏈接
            List<WebElement> aTagElements = resultElements.get(0).findElements(By.tagName("a"));
            if (!aTagElements.isEmpty()) {
                //新開(kāi)一個(gè)窗口打開(kāi)此鏈接
                String href = aTagElements.get(0).getAttribute("href");
                System.out.println(href);
                ((JavascriptExecutor) webDriver).executeScript(String.format("window.open('%s')", href));
            }
        }
        TimeUnit.SECONDS.sleep(10);
        //關(guān)閉瀏覽器
        webDriver.quit();
    }
}

結(jié)果,很神奇的哦

>chrome.exe --disable-remote-words-auto-upgrade --version,selenium,java,測(cè)試工具


元素定位

web自動(dòng)化的難點(diǎn)和重點(diǎn)之一,就是如何?選擇?我們想要操作的web頁(yè)面元素。

id定位

id 定位 driver.findElement(By.id(“id的值”));

如果元素有id屬性 ,這個(gè)id 必須是當(dāng)前html中唯一的。所以如果元素有id, 根據(jù)id選擇元素是最簡(jiǎn)單高效的方式。

  1. 使用WebDriver對(duì)象的findElement函數(shù)定義一個(gè)Web頁(yè)面元素
  2. 使用findElements函數(shù)可以定位頁(yè)面的多個(gè)元素

使用?find_elements?選擇的是符合條件的?所有?元素, 如果沒(méi)有符合條件的元素,?返回空列表

List<WebElement> listOfElements = driver.findElements(By.xpath("http://div"));
webElement.findElements(By.tagName("tr"));
  • 如果沒(méi)有匹配條件的元素,F(xiàn)ind Elements命令將返回一個(gè)空列表

使用?find_element?選擇的是符合條件的?第一個(gè)?元素, 如果沒(méi)有符合條件的元素,?拋出 NoSuchElementException 異常

定位的頁(yè)面元素需要使用WebElement對(duì)象來(lái)存儲(chǔ),以便后續(xù)使用


class定位

class 定位 ? ?driver.findElement(By.className(“class屬性”));

 //企查查
 webDriver.get("https://www.qcc.com/");
 TimeUnit.SECONDS.sleep(2);
 //查企業(yè) 查老板 查風(fēng)險(xiǎn) 查招標(biāo) 找關(guān)系
 List<WebElement> elements = webDriver.findElements(By.className("search-type"));

class 屬性通常用于指向樣式表的類(lèi)

在html中,class規(guī)定元素的類(lèi)名,語(yǔ)法格式為“<元素名稱(chēng) class="value">”。class屬性大多數(shù)時(shí)候用于指向樣式表中的類(lèi)(class)。

>chrome.exe --disable-remote-words-auto-upgrade --version,selenium,java,測(cè)試工具

html標(biāo)簽是允許定義多個(gè)class類(lèi)名的。比如:

<div class = "exp1 exp2"></div>

上邊這個(gè)div就用到了exp1、exp2這兩個(gè)class類(lèi),對(duì)于個(gè)數(shù)是沒(méi)有限制,只需每個(gè)類(lèi)名之間用空格隔開(kāi)就好。


xpath定位

xpath 是XML Path的簡(jiǎn)稱(chēng), 用于在XML文檔中選擇文檔中的節(jié)點(diǎn)?;赬ML樹(shù)狀文檔結(jié)構(gòu),Xpath語(yǔ)言可以在整棵樹(shù)中尋找指定的節(jié)點(diǎn)。

xpath 方式定位    driver.findElement(By.xpath(“xpath表達(dá)式”));

xpath 有兩種表示方法,絕對(duì)路徑和相對(duì)路徑,

絕對(duì)路徑是指從根開(kāi)始,以/開(kāi)始,如/html/body/div,

相對(duì)路徑是指在一個(gè)路徑下,另外的路徑以這個(gè)路徑作為參照,以//開(kāi)始。XPath表達(dá)式中的//表示在HTML文檔的全部層級(jí)位置進(jìn)行查找

舉例如下:

//百度一下
webDriver.get("https://www.baidu.com");
WebElement element = webDriver.findElement(By.xpath("http://*[@id='su']"));

那么為啥是//*[@] 呢?

  • //表示從任意位置去查找
  • *是標(biāo)簽名
  • @是屬性定位

強(qiáng)烈建議使用相對(duì)路徑和屬性值結(jié)合的定位方式來(lái)編寫(xiě)xpath定位表達(dá)式。如

By.xpath("http://*[@id='su']")

xpath獲取技巧:

網(wǎng)頁(yè)的html是一種特殊的XML文檔。使用瀏覽器調(diào)試工具,可以直接獲取xpath語(yǔ)句

右鍵-檢查(或者F12),然后點(diǎn)擊這個(gè)箭頭,就可以在瀏覽器上選擇元素了

>chrome.exe --disable-remote-words-auto-upgrade --version,selenium,java,測(cè)試工具

使用Chrome 來(lái)直接獲取元素的XPath.

>chrome.exe --disable-remote-words-auto-upgrade --version,selenium,java,測(cè)試工具通過(guò)層級(jí)關(guān)系和索引定位(索引從1開(kāi)始):

//*[@id="content"]/div/div[2]/div[4]/div[2]/h2/div[2]/form/div

tag 名 定位

TagName 標(biāo)簽名稱(chēng)定位    driver.findElement(By.tagName(“標(biāo)簽名稱(chēng)”));

選擇所有的tag名為 div的元素,如下所示


name定位

name定位    driver.findElement(By.name(“name的值”));

css定位

CSS定位為的優(yōu)勢(shì)在于定位速度比Xpath定位快,且比Xpath定位更加穩(wěn)定

css 方式定位    driver.findElement(By.cssSelector(“css表達(dá)式”));

操控元素

選擇到元素之后,我們的代碼會(huì)返回元素對(duì)應(yīng)的 WebElement對(duì)象,通過(guò)這個(gè)對(duì)象,我們就可以?操控?元素

輸入框?send_keys

操控元素:send_keys在元素中輸入字符串,通常是對(duì)輸入框這樣的元素

//訪問(wèn)京東
webDriver.navigate().to("https://www.jd.com/");
WebElement input = webDriver.findElement(By.id("key"));
//清空輸入框 //*[@id="key"]
input.clear();
//在輸入框中輸入內(nèi)容
input.sendKeys("藍(lán)牙耳機(jī)");

>chrome.exe --disable-remote-words-auto-upgrade --version,selenium,java,測(cè)試工具

對(duì)于input輸入框的元素,要獲取里面的輸入文本

// 找到元素
WebElement element = driver.findElement(By.id("usernameid"));        
element.getAttribute("value");

按鈕 click

操控元素:click點(diǎn)擊元素

//單擊搜索按鈕
WebElement search = webDriver.findElement(By.xpath("http://*[@id='search']/div/div[2]/button"
search.click();

效果就是模擬人:打開(kāi)京東---輸入“藍(lán)牙耳機(jī)”--點(diǎn)擊搜索

//訪問(wèn)京東
webDriver.navigate().to("https://www.jd.com/");
WebElement input = webDriver.findElement(By.id("key"));
//清空輸入框 //*[@id="key"]
input.clear();
//在輸入框中輸入內(nèi)容
input.sendKeys("藍(lán)牙耳機(jī)");
//單擊搜索按鈕
WebElement search = webDriver.findElement(By.xpath("http://*[@id='search']/div/div[2]/button"));
search.click();

下拉選擇框

獲取元素包含的信息,比如文本內(nèi)容,元素的屬性

在下拉列表中選擇值?

  • selectByValue 語(yǔ)法
  • selectByVisibleText 語(yǔ)法
  • select.selectByIndex()語(yǔ)法;

>chrome.exe --disable-remote-words-auto-upgrade --version,selenium,java,測(cè)試工具

如下圖,選擇“10進(jìn)制”轉(zhuǎn)"16進(jìn)制"

>chrome.exe --disable-remote-words-auto-upgrade --version,selenium,java,測(cè)試工具

 webDriver.get("https://tool.ip138.com/hexconvert/");
 //選擇10進(jìn)制
 WebElement webElementFrom = webDriver.findElement(By.xpath("http://*[@id=\"from_type\"]"));
 Select fromDropList = new Select(webElementFrom);
 fromDropList.selectByVisibleText("10進(jìn)制");
 //選擇16進(jìn)制
 WebElement webElementTo = webDriver.findElement(By.xpath("http://*[@id=\"to_type\"]"));
 Select toDropList = new Select(webElementTo);
 toDropList.selectByVisibleText("16進(jìn)制");
 //打印下拉框中所有的選項(xiàng)
 List<WebElement> options = toDropList.getOptions();
 for (WebElement option : options) {
     System.out.println(option.getText());
 }

操作復(fù)選框

如下圖,我們勾選全局搜索和忽略大小寫(xiě)

>chrome.exe --disable-remote-words-auto-upgrade --version,selenium,java,測(cè)試工具

操作單選框

如下圖,我們操作使得打開(kāi)網(wǎng)站后,選擇時(shí)間戳為“13位”,因?yàn)槟J(rèn)選中的是10位

>chrome.exe --disable-remote-words-auto-upgrade --version,selenium,java,測(cè)試工具

 webDriver.get("https://m.bejson.com/convert/unix/");
 //13位時(shí)間戳(毫秒級(jí))
 WebElement radio = webDriver.findElement(By.xpath("http://*[@id=\"kt_post\"]/div/div/div/div/div/form/div[2]/div[1]/div[2]/input"));
 //如果處于未選中狀態(tài),則單擊選中
 if (!radio.isSelected()) {
     radio.click();
 }

鏈接 link

鏈接的操作

// 找到鏈接元素
WebElement link1 = driver.findElement(By.linkText("小坦克"));
WebElement link11 = driver.findElement(By.partialLinkText("坦克"));

// 點(diǎn)擊鏈接
link1.click();


表格操作

尋找一個(gè)在線的被測(cè)試的網(wǎng)頁(yè)表格,假設(shè)如下:

Personal pronouns table (mdn.github.io)

>chrome.exe --disable-remote-words-auto-upgrade --version,selenium,java,測(cè)試工具

th和td的區(qū)別

<tr>...</tr> 定義一行標(biāo)簽,一組行標(biāo)簽內(nèi)可以建立多組由<td>或<th>標(biāo)簽所定義的單元格

<th>...</th> 定義表頭單元格。表格中的文字將以粗體顯示

<td>...</td> 定義單元格標(biāo)簽,一組<td>標(biāo)簽將將建立一個(gè)單元格

//創(chuàng)建瀏覽器實(shí)例
WebDriver driver = new ChromeDriver();//打開(kāi)chrome
driver.get("https://mdn.github.io/learning-area/html/tables/basic/personal-pronouns.html");//打開(kāi)一個(gè)在線的網(wǎng)頁(yè)表格
//獲取頁(yè)面表格對(duì)象
WebElement element = driver.findElement(By.xpath("/html/body/table"));
//獲取表格行數(shù)
List<WebElement> tr = element.findElements(By.tagName("tr"));
System.out.println("表格行數(shù):" + tr.size());

Action

使用 Action 類(lèi)來(lái)生成用戶(hù)事件,例如右鍵單擊 WebDriver 中的元素。參考代碼片段:

Actions action = newActions(driver);  
WebElement element = driver.findElement(By.id("elementId"));  
//右鍵單擊元素
action.contextClick(element).perform();
//鼠標(biāo)懸停
action.moveToElement(element).perform();

拖放

Actions builder = newActions(driver);  
Action dragAndDrop = builder.clickAndHold(fromWebElement)  
             .moveToElement(toWebElement)  
             .release(toWebElement)  
             .build();  
dragAndDrop.perform();

Web 元素可見(jiàn)性

WebDriver 允許用戶(hù)檢查 Web 元素的可見(jiàn)性。這些網(wǎng)絡(luò)元素可以是按鈕、單選按鈕、下拉菜單、復(fù)選框、框、標(biāo)簽等,它們與以下方法一起使用。

  • isDisplayed()
  • isSelected()
  • isEnabled()

窗口

?網(wǎng)頁(yè)訪問(wèn)

方式一:get方法

//訪問(wèn)京東
webDriver.get("https://www.jd.com/");

方式二:

//訪問(wèn)京東
webDriver.navigate().to("https://www.jd.com/");

一些別的頁(yè)面操作

1、頁(yè)面最大化

//將瀏覽器窗口最大化
webDriver.manage().window().maximize();
//訪問(wèn)京東
webDriver.navigate().to("https://www.jd.com/");

2、獲取頁(yè)面Title屬性

//獲取頁(yè)面Title屬性
String title = webDriver.getTitle();
System.out.println(title);

>chrome.exe --disable-remote-words-auto-upgrade --version,selenium,java,測(cè)試工具

3、獲取頁(yè)面的源代碼

//訪問(wèn)京東
webDriver.navigate().to("https://www.jd.com/");
//獲取網(wǎng)頁(yè)的源代碼
String pageSource = webDriver.getPageSource();
System.out.println(pageSource);

4、刷新頁(yè)面

driver.navigate().refresh();

窗口切換

//獲取當(dāng)前所有打開(kāi)的瀏覽器窗口的句柄
Set<String> windowHandles = webDriver.getWindowHandles();
for (String windowHandle : windowHandles) {
    System.out.println(windowHandle);
    System.out.println(webDriver.switchTo().window(windowHandle).getTitle());
}
//獲取當(dāng)前瀏覽器窗口的句柄
String windowHandle = webDriver.getWindowHandle();
System.out.println("當(dāng)前窗口句柄:"+windowHandle);System.out.println("當(dāng)前窗口句柄:"+windowHandle);

>chrome.exe --disable-remote-words-auto-upgrade --version,selenium,java,測(cè)試工具

控制臺(tái)打印輸出如下>chrome.exe --disable-remote-words-auto-upgrade --version,selenium,java,測(cè)試工具


窗口關(guān)閉

webDriver.close()

如果打開(kāi)了多個(gè)頁(yè)面是關(guān)不干凈的,close()只關(guān)閉當(dāng)前的一個(gè)頁(yè)面。

使用時(shí)要注意 “當(dāng)前頁(yè)面” 這四個(gè)字,意味著當(dāng)你關(guān)閉新打開(kāi)的頁(yè)面時(shí),需要切換窗口才能操作新窗口并將它關(guān)閉。

webDriver.quit()

quit()是退出了所有Webdriver所有的窗口,并退出驅(qū)動(dòng)程序。


Frame

iframe標(biāo)簽

HTML 內(nèi)聯(lián)框架元素 (<iframe>)?表示嵌套的browsing context。它能夠?qū)⒘硪粋€(gè) HTML 頁(yè)面嵌入到當(dāng)前HTML頁(yè)面中。

在 HTML 文檔中 <frame> 每出現(xiàn)一次,就會(huì)創(chuàng)建一個(gè) Frame對(duì)象

通常我們使用iframe直接直接在頁(yè)面嵌套iframe標(biāo)簽指定src就可以了。

<iframe src="demo_iframe.html"></iframe>

可以通過(guò)iframe嵌套通用的頁(yè)面, 提高代碼的重用率, 比如頁(yè)面的頭部樣式和底部版權(quán)信息


Frame切換

在使用selenium打開(kāi)一個(gè)網(wǎng)頁(yè)時(shí),我們的操作范圍默認(rèn)是當(dāng)前的 html ,并不包含被嵌入的html文檔里面的內(nèi)容。如果我們要操作被嵌入的 html 文檔 中的元素, 就必須把操作范圍切換到被嵌入的文檔中。

?WebDriver對(duì)象的switch_to屬性轉(zhuǎn)換,形如

//其中switchFlag可以是frame元素的name或者 ID屬性及 frame 所對(duì)應(yīng)的 WebElement 對(duì)象。
driver.switchTo().frame(switchFlag);

例如frame元素的?id?為‘frame1’,切換語(yǔ)句為:driver.switch_to.frame('frame1')

例如frame元素的name屬性值為‘innerFrame’ ,切換語(yǔ)句為:driver.switch_to.frame('innerFrame')

為什么要切換frame表單

參數(shù)可以是id,name或者能定位到frame的元素。推薦使用name

>chrome.exe --disable-remote-words-auto-upgrade --version,selenium,java,測(cè)試工具

在切換其他frame頁(yè)面之前,需要將WebDriver 對(duì)象切換回默認(rèn)區(qū)域:

webDriver.switchTo().defaultContent();


frame切換/窗口切換 | 白月黑羽 (byhy.net)


安居客登錄

登錄 (anjuke.com)

如下,紅色區(qū)域部分是一個(gè)<iframe>標(biāo)簽

>chrome.exe --disable-remote-words-auto-upgrade --version,selenium,java,測(cè)試工具


彈窗

1、alert彈框

警告消息框 alert 方法有一個(gè)參數(shù),即希望對(duì)用戶(hù)顯示的文本字符串。該字符串不是 HTML 格式。該消息框提供了一個(gè)“確定”按鈕讓用戶(hù)關(guān)閉該消息框,并且該消息框是模式對(duì)話框,也就是說(shuō),用戶(hù)必須先關(guān)閉該消息框然后才能繼續(xù)進(jìn)行操作。

selenium處理alert() 提示框:

  1. driver.switchTo().alert(); 獲取alert
  2. alert.accept(); 點(diǎn)確定
  3. alert.dismiss(); 點(diǎn)取消
  4. alert.getText();獲取alert的內(nèi)容

2、confirm彈框

確認(rèn)消息框 使用確認(rèn)消息框可向用戶(hù)問(wèn)一個(gè)“是-或-否”問(wèn)題,并且用戶(hù)可以選擇單擊“確定”按鈕或者單擊“取消”按鈕。confirm 方法的返回值為 true 或 false。該消息框也是模式對(duì)話框:用戶(hù)必須在響應(yīng)該對(duì)話框(單擊一個(gè)按鈕)將其關(guān)閉后,才能進(jìn)行下一步操作。

1


3、div彈窗

div彈窗是瀏覽器中比較好定位的彈窗,定位的方法與普通的元素一樣。不過(guò)這里會(huì)有一個(gè)坑,明明可以找到這個(gè)按鈕,但是就是定位不到。這個(gè)就是因?yàn)楫?dāng)前有div彈窗彈出的時(shí)候,需要設(shè)置一下等待時(shí)間,等頁(yè)面元素加載完畢,再去做其他操作。這里用百度登陸為例子:


執(zhí)行js

執(zhí)行js代碼

executeScript是同步方法,用它執(zhí)行js代碼會(huì)阻塞主線程執(zhí)行,直到j(luò)s代碼執(zhí)行完畢;

import org.openqa.selenium.JavascriptExecutor;

//第一行代碼將driver強(qiáng)制轉(zhuǎn)換為JavascriptExecutor
JavascriptExecutor js = (JavascriptExecutor) driver;

//第二行代碼是執(zhí)行js,參數(shù)script是要執(zhí)行的js語(yǔ)句,第二個(gè)參數(shù)對(duì)于executeScript這個(gè)方法,取決于js語(yǔ)句是否需要參數(shù)。
js.executeScript(String script, object... args);

executeScript方法返回值Boolean, Long, String, List or WebElement. 或者是 null.

  • 如果返回一個(gè)頁(yè)面元素(document element), 這個(gè)方法就會(huì)返回一個(gè)WebElement
  • 如果返回浮點(diǎn)數(shù)字,這個(gè)方法就返回一個(gè)double類(lèi)型的數(shù)字
  • 返回非浮點(diǎn)數(shù)字,方法返回Long類(lèi)型數(shù)字
  • 返回boolean類(lèi)型,方法返回Boolean類(lèi)型
  • 如果返回一個(gè)數(shù)組,方法會(huì)返回一個(gè)List
  • 其他情況,返回一個(gè)字符串
  • 如果沒(méi)有返回值,此方法就會(huì)返回null

應(yīng)用舉例:用js彈出alert

 JavascriptExecutor js = (JavascriptExecutor) webDriver;
 js.executeScript("alert('Test Case Execution Is started Now..')");
 webDriver.switchTo().alert().accept();

隱式等待

強(qiáng)制等待:sleep

sleep,設(shè)置等待多長(zhǎng)時(shí)間,就要等待多長(zhǎng)時(shí)間。等待完成后,才會(huì)繼續(xù)下一步:

//設(shè)置等待時(shí)間,單位是秒
sleep(3)

由于web加載的速度取決于測(cè)試的硬件、網(wǎng)速、服務(wù)器的響應(yīng)時(shí)間等因素。如果時(shí)間設(shè)置太長(zhǎng),容易造成時(shí)間浪費(fèi),如果設(shè)置太短又可能會(huì)造成在web還沒(méi)有加載完所需要定位的element,而出現(xiàn)報(bào)錯(cuò)。由于等待時(shí)間無(wú)法確定,使用太多的sleep會(huì)影響運(yùn)行速度,大大地降低效率。

隱式等待:implicitlyWait

使用implicitlyWait方法設(shè)定查找頁(yè)面元素的最大等待時(shí)間,調(diào)用findElement方法時(shí)
沒(méi)有立刻找到定位元素,則程序會(huì)每間隔一段時(shí)間就嘗試判斷頁(yè)面的D0M中是否出現(xiàn)被查找元素,若超過(guò)設(shè)定的等待時(shí)長(zhǎng)依舊沒(méi)有找到,則拋出NoSuchElementException

//只需要設(shè)置一次,所有的元素都可有最多 10s 的等待加載的時(shí)間
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
WebElement element = driver.findElement(By.id("exampleId"));

隱式等待的默認(rèn)最長(zhǎng)等待時(shí)間是0,一旦設(shè)置完成,這個(gè)隱式等待會(huì)在webdriver對(duì)象實(shí)例的整個(gè)生命周期起作用

---------------

隱式等待原理:

在每次進(jìn)行 find_element時(shí)起作用,implicitlyWait()會(huì)將一個(gè)超時(shí)的時(shí)間閥值傳遞給 WebDriver,在findelement或者findelements的時(shí)候,首先去找 web element,如果沒(méi)有找到,判斷時(shí)間否超超過(guò) implicitlyWait()傳遞進(jìn)來(lái)的閥值,如果沒(méi)有超過(guò),則再次找這個(gè)element,直到找到 element 或者時(shí)間超過(guò)最大閥值。


顯式等待

顯式等待:WebDriverWait類(lèi)

WebDriverWait(driver,10,1) 在等待期間,每隔1s一定時(shí)間,調(diào)用until或until_not里的方法,直到它返回True或False.

  • driver:瀏覽器驅(qū)動(dòng)。
  • 10:最長(zhǎng)超時(shí)時(shí)間,默認(rèn)以秒為單位。
  • 1:檢測(cè)的的間隔(步長(zhǎng)) 時(shí)間,默認(rèn)為 0.5s。

顯式等待能自定義等待條件,只要滿足等待條件即可執(zhí)行下一步代碼操作,一般需要配合該類(lèi)的until()和until_not()方法一起用.

表示程序每隔一定時(shí)間就檢查一遍條件是否成立,如果成立了就執(zhí)行下一步,否則就繼續(xù)等。直到超過(guò)設(shè)置的最長(zhǎng)時(shí)間,然后拋出超時(shí)錯(cuò)誤TimeoutException

//判斷某元素是否可訪問(wèn)并且可啟用,比如能夠點(diǎn)擊
new WebDriverWait(driver, 10)
   .until(ExpectedConditions.elementToBeClickable(webElement));


//判斷某個(gè)元素是否可見(jiàn). 可見(jiàn)代表元素非隱藏,并且元素的寬和高都不等于0
new WebDriverWait(driver, 10)
	.until(ExpectedConditions.visibilityOf(webElement));

//判斷某元素否被選中
new WebDriverWait(driver, 10)
     .until(ExpectedConditions.elementToBeSelected(webElement));

常用的顯示等待條件如下:

>chrome.exe --disable-remote-words-auto-upgrade --version,selenium,java,測(cè)試工具


自定義顯示等待

注意ExpectedConditions的寫(xiě)法變成了自定義文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-764320.html

WebDriverWait wait = new WebDriverWait(driver, Manager_Config.getCmdTimeout() / 1000);
try {
	Alert alert = wait.until(new ExpectedCondition<Alert>() {
		@Override
		public Alert apply(WebDriver driver) {
			try {
				return driver.switchTo().alert();
			} catch (NoAlertPresentException e) {
				return null;
			}
		}
	});
	if (alert != null)
		alert.accept();

到了這里,關(guān)于selenium瀏覽器自動(dòng)化測(cè)試【基于java】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(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)文章

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

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

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

    2024年02月07日
    瀏覽(201)
  • Selenium瀏覽器自動(dòng)化測(cè)試框架簡(jiǎn)單介紹

    Selenium瀏覽器自動(dòng)化測(cè)試框架簡(jiǎn)單介紹

    目錄 selenium簡(jiǎn)介 介紹 功能 優(yōu)勢(shì) 基本使用 獲取單節(jié)點(diǎn) 獲取多節(jié)點(diǎn) 節(jié)點(diǎn)交互 動(dòng)作鏈 執(zhí)行JavaScript代碼 獲取節(jié)點(diǎn)信息 切換frame 延時(shí)等待 前進(jìn)和后退 cookies 選項(xiàng)卡管理 異常處理 選項(xiàng)卡切換 無(wú)頭瀏覽器 介紹 Selenium?[1]??是一個(gè)用于Web應(yīng)用程序測(cè)試的工具。Selenium測(cè)試直接運(yùn)行在

    2024年02月13日
    瀏覽(54)
  • selenium瀏覽器自動(dòng)化測(cè)試【基于java】

    selenium瀏覽器自動(dòng)化測(cè)試【基于java】

    Selenium 是一個(gè)用于Web應(yīng)用程序的自動(dòng)化測(cè)試工具。它直接運(yùn)行在瀏覽器中,可以模擬用戶(hù)在瀏覽器上面的行為操作。 chrome.exe 默認(rèn)安裝位置:C:Program FilesGoogleChromeApplicationchrome.exe 結(jié)果我的在:C:Users91073AppDataLocalGoogleChromeApplicationchrome.exe 。。。為啥? 下載驅(qū)動(dòng) 最新

    2024年02月04日
    瀏覽(23)
  • Selenium瀏覽器自動(dòng)化測(cè)試框架詳解_selenium 測(cè)試框架介紹

    Selenium瀏覽器自動(dòng)化測(cè)試框架詳解_selenium 測(cè)試框架介紹

    先自我介紹一下,小編浙江大學(xué)畢業(yè),去過(guò)華為、字節(jié)跳動(dòng)等大廠,目前阿里P7 深知大多數(shù)程序員,想要提升技能,往往是自己摸索成長(zhǎng),但自己不成體系的自學(xué)效果低效又漫長(zhǎng),而且極易碰到天花板技術(shù)停滯不前! 因此收集整理了一份《2024年最新軟件測(cè)試全套學(xué)習(xí)資料》

    2024年04月25日
    瀏覽(23)
  • Edge瀏覽器做web自動(dòng)化測(cè)試(selenium)

    Edge瀏覽器做web自動(dòng)化測(cè)試(selenium)

    查看瀏覽器設(shè)置看edge瀏覽器版本 ? 下載edge瀏覽器對(duì)應(yīng)版本驅(qū)動(dòng) Microsoft Edge WebDriver - Microsoft Edge Developer ? 下載完畢后壓縮包 ? ?后面請(qǐng)參考selenium使用 selenium自動(dòng)化測(cè)試(初窺門(mén)徑)_鄧霖濤的博客-CSDN博客 在導(dǎo)入selenium的maven 相關(guān)依賴(lài)可以用選擇edge的驅(qū)動(dòng) ? 測(cè)試代碼如下:? 執(zhí)

    2024年02月12日
    瀏覽(19)
  • Selenium瀏覽器交互原理與應(yīng)用,玩轉(zhuǎn)Web自動(dòng)化測(cè)試

    Selenium瀏覽器交互原理與應(yīng)用,玩轉(zhuǎn)Web自動(dòng)化測(cè)試

    ? 目錄 ?前言: 瀏覽器交互: Selenium的實(shí)現(xiàn)方式: Selenium WebDriver: WebDriver的等待機(jī)制: 總結(jié): ?Web自動(dòng)化

    2024年02月08日
    瀏覽(15)
  • UI自動(dòng)化測(cè)試之selenium工具(瀏覽器窗口的切換)

    UI自動(dòng)化測(cè)試之selenium工具(瀏覽器窗口的切換)

    1、在瀏覽網(wǎng)頁(yè)的時(shí)候,有時(shí)點(diǎn)擊一個(gè)鏈接或者按鈕,會(huì)彈出一個(gè)新的窗口。這類(lèi)窗口也被稱(chēng)之為句柄(一個(gè)瀏覽器窗口的唯一標(biāo)識(shí)符,通過(guò)句柄實(shí)現(xiàn)不同瀏覽器窗口之間的切換),在我們手動(dòng)控制瀏覽器的時(shí)候,產(chǎn)生新的句柄時(shí)瀏覽器會(huì)自動(dòng)的幫我們跳轉(zhuǎn)到最新的句柄處(鼠

    2024年02月02日
    瀏覽(20)
  • 軟件測(cè)試/測(cè)試開(kāi)發(fā)丨Selenium Web自動(dòng)化多瀏覽器處理

    軟件測(cè)試/測(cè)試開(kāi)發(fā)丨Selenium Web自動(dòng)化多瀏覽器處理

    本文為霍格沃茲測(cè)試開(kāi)發(fā)學(xué)社學(xué)員學(xué)習(xí)筆記分享 原文鏈接:https://ceshiren.com/t/topic/27185 用戶(hù)使用的瀏覽器(firefox,chrome,IE 等) web 應(yīng)用應(yīng)該能在任何瀏覽器上正常的工作,這樣能吸引更多的用戶(hù)來(lái)使用 是跨不同瀏覽器組合驗(yàn)證網(wǎng)站或 web 應(yīng)用程序功能的過(guò)程 是兼容性測(cè)試的一個(gè)

    2024年02月09日
    瀏覽(27)
  • java + Selenium 實(shí)現(xiàn)自動(dòng)化測(cè)試,模擬人手點(diǎn)擊操作 chrome 瀏覽器

    引入 maven 依賴(lài): 安裝 chromeDriver:略 SeleniumUtils.java: ChromeDriverUtils.java: 使用示例:

    2024年02月11日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包