selenium語法進階+常用API

目錄

瀏覽器操作

瀏覽器回退,前進 與刷新

瀏覽器窗口設置大小?

瀏覽器設置寬高?

瀏覽器窗口最大化?

瀏覽器控制滾動條?

信息打印?

打印頁面的標題和當前頁面的URL

定位一組元素?

鼠標和鍵盤事件?

鍵盤?

鼠標?

下拉框操作?

通過索引定位(selectByIndex(索引值(從0開始)))

通過value屬性定位(selectByValue)

通過文本內容定位(selectByVisibleText)

文件上傳?

多級框架/窗口定位 (switchTo())

彈窗?

警告彈窗與確認彈窗

提示彈窗?

截圖?

關閉頁面(quit和close)


瀏覽器操作

瀏覽器回退,前進 與刷新

瀏覽器的回退指的是從當前頁面退回上一個頁面,如下圖:

這里要注意頁面和新建標簽頁的區別。

這里比如說我們打開百度搜索,然后搜索軟件測試后進行回退:

    private static void test02() throws InterruptedException {WebDriver webDriver=new ChromeDriver();webDriver.get("https://www.baidu.com/");WebElement element= webDriver.findElement(By.cssSelector("#kw"));element.sendKeys("軟件測試");Thread.sleep(3000);webDriver.navigate().back();}

回退的時候需要使用驅動提供的navigate中的back方法,當然,如果想要回到回退前的頁面則可以使用navigate下的forward方法:

    private static void test02() throws InterruptedException {WebDriver webDriver=new ChromeDriver();webDriver.get("https://www.baidu.com/");WebElement element= webDriver.findElement(By.cssSelector("#kw"));element.sendKeys("軟件測試");Thread.sleep(3000);webDriver.navigate().back();Thread.sleep(3000);webDriver.navigate().forward();}

當然,如果想刷新頁面的話可以使用navigate下的refresh方法:

    private static void test02() throws InterruptedException {WebDriver webDriver=new ChromeDriver();webDriver.get("https://www.baidu.com/");WebElement element= webDriver.findElement(By.cssSelector("#kw"));element.sendKeys("軟件測試");Thread.sleep(3000);webDriver.navigate().back();Thread.sleep(3000);webDriver.navigate().forward();Thread.sleep(3000);webDriver.navigate().refresh();}

瀏覽器窗口設置大小?

瀏覽器窗口可以設置大小,可以設置窗口的寬,高,也可以使得窗口最大化

瀏覽器設置寬高?

如點擊百度搜索頁面的新聞按鈕后的窗口設置寬高?

webDriver.manage().window().setSize(new Dimension(200,500));

同時也可以最大化

瀏覽器窗口最大化?

 webDriver.manage().window().maximize();

?

瀏覽器控制滾動條?

瀏覽器滾動條的控制需要依靠js腳本才能實現?

如在前端頁面中輸入:

document.documentElement.scrollTop=9999

滾動條就會往下移動。那么我們在idea中如何實現:

((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=19999");

?

信息打印?

打印頁面的標題和當前頁面的URL

?獲取百度搜索頁面的標題:

 String title= webDriver.getTitle();

獲取百度搜索頁面的URL:?

String url=webDriver.getCurrentUrl();
    private static void test05() {WebDriver webDriver=new ChromeDriver();webDriver.get("https://www.baidu.com/");//獲取當前頁面的標題String title= webDriver.getTitle();//獲取當前頁面的URLString url=webDriver.getCurrentUrl();System.out.println("當前頁面的標題為"+title);System.out.println("當前頁面的url為"+url);}

定位一組元素?

定位一組元素,就比如一些選項,他有幾種標簽類型,我們需要選中所有input的標簽中type值為context的選項:

    private static void test06() {WebDriver webDriver=new ChromeDriver();webDriver.get("你要打開的頁面");//獲取所有的input標簽List<WebElement> elements= webDriver.findElements(By.cssSelector("input"));//選中符合type的值為context的選項for (int i = 0; i <elements.size() ; i++) {if(elements.get(i).getAttribute("type").equals("context")){elements.get(i).click();}else {;//什么也不干}}}

鼠標和鍵盤事件?

鍵盤?

比如我們在百度搜索框中輸入軟件測試后進行搜索,然后使用Ctrl+A選中搜索框中的軟件測試,進行Ctrl+X,然后再Ctrl+V進行復制搜索

   private static void test07() throws InterruptedException {WebDriver webDriver=new ChromeDriver();webDriver.get("https://www.baidu.com/");//搜索軟件測試//WebElement element=webDriver.findElement(By.cssSelector("#kw"));webDriver.findElement(By.cssSelector("#kw")).sendKeys("軟件測試");sleep(3000);//webDriver.manage().timeouts().implicitlyWait(1, TimeUnit.DAYS);//選中搜索框+ctrl+AwebDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"A");sleep(3000);//webDriver.manage().timeouts().implicitlyWait(1, TimeUnit.DAYS);//ctrl+xwebDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"X");sleep(3000);//webDriver.manage().timeouts().implicitlyWait(1, TimeUnit.DAYS);//ctrl+vwebDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"V");//webDriver.manage().timeouts().implicitlyWait(1, TimeUnit.DAYS);sleep(3000);}

使用鍵盤輸入使用的是sendKeys中的參數keys調用相關的按鍵(如SHIFT,CONTROL等等)+對應的按鍵(需要用雙引號)??

鼠標?

比如我們在搜索軟件測試后在圖片處進行右擊:

private static void test08() throws InterruptedException {WebDriver webDriver=new ChromeDriver();webDriver.get("https://www.baidu.com/");webDriver.findElement(By.cssSelector("#kw")).sendKeys("軟件測試");webDriver.findElement(By.cssSelector("#su")).click();sleep(3000);//將鼠標移動到圖片位置進行右擊WebElement element=  webDriver.findElement(By.cssSelector("#s_tab > div > a.s-tab-item.s-tab-item_1CwH-.s-tab-pic_p4Uej.s-tab-pic"));//借助ActionsActions actions=new Actions(webDriver);//進行右擊并展示actions.moveToElement(element).contextClick().perform();}

使用鼠標進行點擊的時候需要借助Actions對象,使用時候使用perform來展示出效果。

常用的鼠標操作還有:

?

下拉框操作?

下拉框的操作需要借助Select的對象進行操作

通過索引定位(selectByIndex(索引值(從0開始)))

    private static void test09() {WebDriver webDriver=new ChromeDriver();webDriver.get("需要訪問的網址");WebElement element=webDriver.findElement(By.cssSelector("下拉框的css標志位"));//借助Select對象Select select=new Select(element);select.selectByIndex(0);}

通過value屬性定位(selectByValue)

?

    private static void test09() {WebDriver webDriver=new ChromeDriver();webDriver.get("需要訪問的網址");WebElement element=webDriver.findElement(By.cssSelector("下拉框的css標志位"));//借助Select對象Select select=new Select(element);//select.selectByIndex(0);select.selectByValue("下拉框的value屬性對應的值");}

通過文本內容定位(selectByVisibleText)

?

    private static void test09() {WebDriver webDriver=new ChromeDriver();webDriver.get("需要訪問的網址");WebElement element=webDriver.findElement(By.cssSelector("下拉框的css標志位"));//借助Select對象Select select=new Select(element);//select.selectByIndex(0);//select.selectByValue("下拉框的value屬性對應的值");select.selectByVisibleText("C");}

文件上傳?

文件上傳就是選擇文件上傳的按鈕的文章,使用sendKeys將文件所在的路徑導入進行上傳文件

    private static void test10() {WebDriver webDriver=new ChromeDriver();webDriver.get("需要訪問的網址");WebElement element=webDriver.findElement(By.cssSelector("文件上傳框的css標志位"));element.sendKeys("文件路徑,如E://xxx.xxx");}

多級框架/窗口定位 (switchTo())

由于我們直接使用選擇器進行定位是在div下進行的,對于一些在frame下的標簽我們是無法獲得定位的,所以就要用到了多級框架和窗口定位,?對于frame使用:

    private static void test11() {WebDriver webDriver=new ChromeDriver();webDriver.get("需要訪問的網址");webDriver.switchTo().frame("frame的id");//找到標志所在的frame之后就可以正常使用了webDriver.findElement(By.cssSelector("選中元素的css標志位")).click();}

多級窗口定位與框架相似,使用?switchTo().window。

彈窗?

警告彈窗與確認彈窗

需要使用Alert對象,dismiss為取消,accept為確認

    private static void test12() {WebDriver webDriver=new ChromeDriver();webDriver.get("需要訪問的網址");Alert alert= webDriver.switchTo().alert();//取消彈窗alert.dismiss();//確認彈窗alert.accept();//提示彈窗中輸入內容alert.sendKeys("輸入的內容");//進行確認alert.accept();}

提示彈窗?

需要我們輸入內容后點擊確認:

    private static void test12() {WebDriver webDriver=new ChromeDriver();webDriver.get("需要訪問的網址");Alert alert= webDriver.switchTo().alert();//取消彈窗alert.dismiss();//確認彈窗alert.accept();//提示彈窗中輸入內容alert.sendKeys("輸入的內容");//進行確認alert.accept();}

截圖?

對于測試的結果,我們有的需要使用截圖來進行查看,使用自動化截圖首先要在maven倉庫中使用相關的依賴,在maven倉庫搜索common-io

?

<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version>
</dependency>

導入到pom.xml中

?在百度搜索軟件測試并進行截圖保存:

private static void test13() throws InterruptedException, IOException {WebDriver webDriver=new ChromeDriver();webDriver.get("https://www.baidu.com/");webDriver.findElement(By.cssSelector("#kw")).sendKeys("軟件測試");webDriver.findElement(By.cssSelector("#su")).click();sleep(3000);//對搜索結果進行截圖File file=((TakesScreenshot)(webDriver)).getScreenshotAs(OutputType.FILE);//將文件放到硬盤FileUtils.copyFile(file,new File("C:\\Users\\ht\\2023-0816jietu.png"));}

截圖完成。

關閉頁面(quit和close)

對于測試后關閉頁面使用driver.quit和driver.close

quit和close是有區別的,quit關閉頁面后會清除掉緩存,而close則不清除緩存

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40098.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40098.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40098.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【BASH】回顧與知識點梳理(三十二)

【BASH】回顧與知識點梳理 三十二 三十二. SELinux 初探32.1 什么是 SELinux當初設計的目標&#xff1a;避免資源的誤用傳統的文件權限與賬號關系&#xff1a;自主式訪問控制, DAC以政策規則訂定特定進程讀取特定文件&#xff1a;委任式訪問控制, MAC 32.2 SELinux 的運作模式安…

安科瑞變電所運維平臺在電力系統中應用分析

摘要&#xff1a;現代居民生活、工作對電力資源的需求量相對較多&#xff0c;給我國的電力產業帶來了良好的發展機遇與挑戰。探索電力系統基本構成&#xff0c; 將變電運維安全管理以及相應的設備維護工作系統性開展&#xff0c;能夠根據項目實踐工作要求&#xff0c;將滿足要求…

C語言暑假刷題沖刺篇——day2

目錄 一、選擇題 二、編程題 &#x1f388;個人主頁&#xff1a;庫庫的里昂 &#x1f390;CSDN新晉作者 &#x1f389;歡迎 &#x1f44d;點贊?評論?收藏?收錄專欄&#xff1a;C語言每日一練 ?其他專欄&#xff1a;代碼小游戲C語言初階&#x1f91d;希望作者的文章能對你…

最小生成樹,prim算法

Prim算法和Kruskal算法都是用于解決最小生成樹問題的經典算法&#xff0c;它們在不同情況下有不同的適用性和特點。 Prim算法&#xff1a; Prim算法是一種貪心算法&#xff0c;用于構建一個無向圖的最小生成樹。算法從一個初始節點開始&#xff0c;逐步添加與當前樹連接且具有…

【自動電壓調節器】無功功率控制的終端電壓控制研究(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;歡迎來到本博客????&#x1f4a5;&#x1f4a5; &#x1f3c6;博主優勢&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客內容盡量做到思維縝密&#xff0c;邏輯清晰&#xff0c;為了方便讀者。 ??座右銘&a…

小白的Node.js學習筆記大全---不定期更新

let、const、var的區別 &#xff08;1&#xff09;塊級作用域&#xff1a; 塊作用域由 { }包括&#xff0c;let和const具有塊級作用域&#xff0c;var不存在塊級作用域。塊級作用域解決了ES5中的兩個問題&#xff1a; 內層變量可能覆蓋外層變量 用來計數的循環變量泄露為全局…

【加強管理】《別輸在不懂管理上》學習記錄,黃金41條

成功有時是很難效法的&#xff0c;但失敗是可以避免的&#xff0c;從失敗中吸取經驗和教訓才是管理者的必修課。釋義&#xff1a; 圖形含義&#x1f332;一級重要&#x1f340;二級重要&#x1f33f;三級主要&#x1f341;存在問題&#x1f33c;解決辦法 1 不能從頭管到腳 不…

【討論】視頻監控集中存儲方案如何做?

視頻監控集中存儲是指將多個視頻監控攝像頭所捕捉到的視頻信號集中存儲于一個中央設備&#xff0c;這個中央設備可以是服務器、網絡存儲設備或其他專用設備。通過集中存儲&#xff0c;可以避免因為存儲設備分散而導致的管理不便和難以有效地管理和檢索視頻數據&#xff0c;同時…

RTT(RT-Thread)ADC設備(RTT保姆級介紹)

目錄 ADC設備 前言 ADC相關參數說明 訪問ADC設備 配置ADC設備 ADC實例 硬件設計 軟件設計 ADC設備 前言 ADC(Analog-to-Digital Converter) 指模數轉換器。是指將連續變化的模擬信號轉換為離散的數字信號的器件。 對于ADC的詳細介紹和在STM32中的裸機應用可參考以下…

pandas數據分析38——數據框表格拓展以及縮回對齊

案例背景 需求是這個樣的&#xff1a; 把這個表格進行拓展。 代碼實現&#xff1a; df pd.DataFrame(np.array([[1, 2, 3,4], [a,b, c,d], [小明,小紅, 小馬,小天]])) df 方法一&#xff1a;自定義函數&#xff1a; def expand_dataframe(df):m, n df.shapenew_df pd.Dat…

linux系統中設置服務開機自啟動

1&#xff1a;背景描述 最近根據工作需要&#xff0c;需要服務實現開機自啟動的效果&#xff0c;因為平時只使用過nohup的后臺掛起操作&#xff0c;很少接觸開機&#xff0c;鏡像裝機服務自啟動的功能&#xff0c;因此&#xff0c;這里簡單記錄一下。 注意&#xff0c;開機自…

解鎖數據潛力:信息抽取、數據增強與UIE的完美融合

解鎖數據潛力&#xff1a;信息抽取、數據增強與UIE的完美融合 1.信息抽取&#xff08;Information Extraction&#xff09; 1.1 IE簡介 信息抽取是 NLP 任務中非常常見的一種任務&#xff0c;其目的在于從一段自然文本中提取出我們想要的關鍵信息結構。 舉例來講&#xff0…

從NLP到聊天機器人

一、說明 今天&#xff0c;當打電話給銀行或其他公司時&#xff0c;聽到電話另一端的機器人向你打招呼是很常見的&#xff1a;“你好&#xff0c;我是你的數字助理。請問你的問題。是的&#xff0c;機器人現在不僅可以說人類語言&#xff0c;還可以用人類語言與用戶互動。這是由…

windows權限維持—黃金白銀票據隱藏用戶遠控RustDeskGotoHttp

windows權限維持—黃金白銀票據&隱藏用戶&遠控&RustDesk&GotoHttp 1. 前置1.1. 初始問題1.1.1. 解決辦法 2. 隱藏用戶2.1. 工具原理2.2. 案例操作2.2.1. 單機添加用戶2.2.1.1. 工具添加用戶2.2.1.2. 工具查看隱藏用戶2.2.1.3. 本地查看隱藏用戶 2.2.2. 域內添加…

CentOS系統環境搭建(二)——Centos7設置時間為網絡時間

centos系統環境搭建專欄&#x1f517;點擊跳轉 Centos7設置時間為網絡時間 安裝ntpdate工具 yum -y install ntp ntpdate關閉ntpd service ntpd stop設置系統時間與網絡時間同步 ntpdate 0.asia.pool.ntp.org將系統時間寫入硬件時間 hwclock --systohc查看和設置時區 使…

NeuralNLP-NeuralClassifier的使用記錄(二),訓練預測自己的【中文文本多分類】

NeuralNLP-NeuralClassifier的使用記錄&#xff0c;訓練預測自己的【中文文本多分類】 數據準備&#xff1a; ? 與英文的訓練預測一致&#xff0c;都使用相同的數據格式&#xff0c;將數據通過代碼處理為JSON格式&#xff0c;以下是我使用的一種&#xff0c;不同的原數據情況…

java+springboot+mysql理發會員管理系統

項目介紹&#xff1a; 使用javaspringbootmysql開發的理發會員管理系統&#xff0c;系統包含超級管理員&#xff0c;系統管理員、客戶、發型師角色&#xff0c;功能如下&#xff1a; 超級管理員&#xff1a;管理員管理&#xff1b;會員管理&#xff1b;發型師管理&#xff1b…

如何保證數據庫的數據和Redis的數據一致性

實際項目中有可能會使用Redis緩存數據&#xff0c;那么在更新數據的時候如何保證數據庫中的數據和Redis緩存的數據一致&#xff0c;緩存同步策略的選擇是一個很重要的問題。網上有各種說法&#xff0c;大概總結有以下幾種&#xff0c;看看每種方案是否可行以及存在的問題和適用…

安裝軟件包

安裝軟件包 創建一個名為 /home/curtis/ansible/packages.yml 的 playbook : 將 php 和 mariadb 軟件包安裝到 dev、test 和 prod 主機組中的主機上 將 RPM Development Tools 軟件包組安裝到 dev 主機組中的主機上 將 dev 主機組中主機上的所有軟件包更新為最新版本 vim packa…

關于Firmae缺失binwalk模塊

問題 david707:~/FirmAE$ sudo ./run.sh -c weyow ./WAM_9900-20.06.03V.trx [*] ./WAM_9900-20.06.03V.trx emulation start!!! Traceback (most recent call last):File "./sources/extractor/extractor.py", line 19, in <module>import binwalk ModuleNot…