RF的WEB自動化編寫指導


RF的Web自動化UI

產品規划及汽車新技術研究院 智能網聯開發中心 互聯網平台部

牛珊 2020/11/26

1. Robot Framework功能使用

RF是RobotFrameWork的簡稱,Robot Framework是一款python編寫的功能自動化測試框架。具備良好的可擴展性,支持關鍵字驅動,因其自帶很多已經編好的類庫,能夠很好地適應不同python基礎的人來學習及使用,可以同時測試多種類型的客戶端或者接口,可以進行分布式測試執行。主要用於輪次很多的驗收測試和驗收測試驅動開發(ATDD

 

1web自動化:主要指web頁面的自動化工作

使用類庫:Selenium2Library

優點:簡單易學易編寫

缺點:web腳本過多的依賴於網頁元素的穩定性,后期維護會變的困難,且工作量大

2、接口自動化:主要指借助協議接口調用及數據傳輸和服務器交互的測試。分為REST接口自動化和SSHapi接口測試。REST接口自動化:使用HttpLibarary.HTTP庫,通過http類協議做數據傳輸和服務器交互(pip install upgrade robotframework-httplibrary )

SSHapi接口測試:使用SSHLibarary庫,通過ssh協議連接服務器進行測試,

優點:穩定性、容錯性較好,運行速度快,維護成本低

缺點:需要了解一定入門級的接口及網頁編輯原理,上手較為困難

3app類自動化:主要指適用於各類app自動化測試,如安卓系統,

使用類庫:Appium

 

1.1 Ride功能介紹

 

1.1.1 創建工程

在本地任意目錄創建一個文件夾隨后在ride里面打開這個文件夾例如:UITest

 

 

 

每個自動化工程建議有以下幾部分以方便工程后期擴展及統一管理:(在這里創建的每一個目錄都對應本地目錄層級,也可以本地創建好目錄后用RF打開)

 

測試用例目錄:用於存放自動化腳本

測試數據目錄:存放測試數據,如json文件,測試輸入准備數據等

關鍵字目錄:用於存放項目編寫的公共方法及封裝的關鍵字方法

用戶自定義關鍵字目錄(關鍵字目錄的下一級):存放自己編寫的一些py文件

變量目錄:存放提前設置好的全局變量,用於后期引用

腳本編寫的時候根據用例的層級模型創建目錄,同類腳本放在一個目錄下方便參數和關鍵字的引用具體過程如下。

 

1.1.2 創建目錄和套件

1、 在工程目錄上右鍵選擇New Directory創建目錄層級

 

 

完成目錄創建后,新建測試套(NewSuite 單元)

 

1.1.3 創建腳本和界面簡介

在上一步創建的測試套上右擊新建腳本(New test case),創建完成后腳本界面如下,依次為:

 

 

RUN 腳本運行界面:控制腳本運行和運行日志導出查看的界面,在運行日志分析時詳細說明

Text Edit 文檔編輯界面:此界面是直接編輯腳本保存的txt文檔以達到修改編輯腳本的目的(點開看一下就明白了!)

Edit 腳本編輯界面:當前截圖所示界面,用以全面編輯腳本,設置前后置等

Settings 界面設置:管理腳本配套設置界面

Documentation 文檔說明:此處用來說明腳本,一般用來存放完整用例以保證腳本忠誠度

Setup 腳本前置:腳本運行前運行的關鍵字,一般用來運行測試數據或環境准備

Teardown 腳本后置腳本運行后運行的關鍵字,此處無論腳本運行結果成功與否都會執行,相當於編程語言中異常處理的finally語句塊,一般用來清理測試數據和恢復測試環境

Timeout 超時時間 腳本運行的超時時間,如果腳本運行時間大於這里設定的時間就會運行失敗,標記block或者failed

Tags 腳本標記:批量運行時用於控制和識別腳本,有興趣下來了解

Template 模板腳本模板,用來限制參數數據?不太好懂,也比較少用,有興趣下去了解

 

 

 

1.1.4 導入庫和資源

 

Python中的庫點擊library,name里面添加庫名稱點擊保存這個庫就添加成功前提是這個庫已經成功安裝在Python目錄下

 

Resource是后期自定義的一些文件,用於存儲公共關鍵字等文件,存放在項目目錄中,選擇后會相對路徑的方式存在

 

 

1.1.5 編寫及運行腳本

新建的測試腳本Test里面編寫測試腳本

 

看下腳本運行界面,紅框中是做啟停等操作界面的輸入鍵

紅色箭頭分別表示:

運行狀態:綠色表示運行通過,紅叉表示運行失敗

Log :用於打開運行日志界面,是保存在本地的html文件

其他鍵位如其名

 

 

1.1.6 分析腳本的運行日志

在腳本運行失敗后,我們要分析日志查看失敗原因,一般失敗會有以下三個問題引起:

1、問題:腳本狀態及編寫無問題,環境正常仍運行失敗,說明索要執行的用例不通過,版本有問題,此時建議根據手動去驗證結果

2、腳本問題:是因為腳本邏輯導致的代碼運行錯誤,分析后調試腳本,確保腳本代碼邏輯正確,運行穩定

3、環境問題:因腳本運行環境或產品服務器突發異常導致的腳本失敗,修復環境后重新運行

4、復制log文件到瀏覽器里面查看日志的詳細信息:

 

5、日志界,點擊測試套/腳本對應的右邊綠色條可以打開詳細信息

 

根據對應的關鍵字運行信息進行腳本運行結果分析,

 

 

 

 

 

2. 定位元素

2.1 Selenium8中定位元素的方法

2.1.1 id定位

id定位: find_element_by_id()

從上面定位到的搜索框屬性中,有個id="kw"的屬性,我們可以通過這個id定位到這個搜索框

 

2.1.2 name定位

name定位: find_element_by_name()

從上面定位到的搜索框屬性中,有個name="wd"的屬性,我們可以通過這個name定位到這個搜索框

2.1.3 class定位

class定位:find_element_by_class_name()

從上面定位到的搜索框屬性中,有個class="s_ipt"的屬性,我們可以通過這個class定位到這個搜索框

2.1.4 tag定位

tag定位:find_element_by_tag_name()

如果懂HTML知識,我們就知道HTML是通過tag來定義功能的,比如input是輸入,table是表格,等等...。每個元素其實就是一個tag,一個tag往往用來定義一類功能,我們查看百度首頁的html代碼,可以看到有很多div,input,atag,所以很難通過tag去區分不同的元素。基本上在我們工作中用不到這種定義方法,僅了解就行。

 

2.1.5 link定位

link定位:find_element_by_link_text()

此種方法是專門用來定位文本鏈接的,比如百度首頁右上角有“新聞”,“hao123”,“地圖”等鏈接

 

2.1.6 partial_link定位

partial_link定位:find_element_by_partial_link_text()

有時候一個超鏈接的文本很長很長,我們如果全部輸入,既麻煩,又顯得代碼很不美觀,這時候我們就可以只截取一部分字符串,用這種方法模糊匹配了。

 

2.1.7 xpath定位

xpath定位:find_element_by_xpath()

前面介紹的幾種定位方法都是在理想狀態下,有一定使用范圍的,那就是:在當前頁面中,每個元素都有一個唯一的idnameclass或超鏈接文本的屬性,那么我們就可以通過這個唯一的屬性值來定位他們。

但是在實際工作中並非有這么美好,有時候我們要定位的元素並沒有id,name,class屬性,或者多個元素的這些屬性值都相同,又或者刷新頁面,這些屬性值都會變化。那么這個時候我們就只能通過xpath或者CSS來定位了。

2.1.8 css定位

CSS定位:find_element_by_css_selector()

這種方法相對xpath要簡潔些,定位速度也要快些,但是學習起來會比較難理解,這里只做下簡單的介紹。

 

2.2 Xpath定位元素

2.2.1 Xpath路徑如何獲取

解決:谷歌F12打開檢查界面,點擊箭頭,然后定位到該元素,右鍵-copy->copy Xpath

 

 

隨后就copy出來一個

但是這種xpath只要界面位置變動就需要重新復制

 

2.2.2 Xpath簡介

什么是xpath

XPath 使用路徑表達式在 XML 文檔中進行導航

XPath 包含一個標准函數庫

XPath XSLT 中的主要元素

XPath 是一個 W3C 標准

 

XPath 路徑表達式

XPath 使用路徑表達式來選取 XML 文檔中的節點或者節點集。這些路徑表達式和我們在常規的電腦文件系統中看到的表達式非常相似。

2.2.3 Xpath語法之選取節點

可以看下如下的xpath路徑的編寫方式如果不會可以模仿着寫這種不會因為位置的變動有非常大的改變例如

//*[@name='loginname']

//*[@type='submit']

//span[contains(text(),'${username}')]

//div[contains(text(),’在線客服’)]

//a[@title='選擇年份']

//a[contains(@class,'mz-calendar-month-panel-month') and text()='${m1}']

//div[contains(text(),’在線客服’)]/../div/div//input

//a[contains(text(),’在線客服’)]/../div/div//li[1]

 

 

表達式

描述

nodename

選取此節點的所有子節點。

/

從根節點選取。

//

從匹配選擇的當前節點選擇文檔中的節點,而不考慮它們的位置。

.

選取當前節點。

..

選取當前節點的父節點。

@

選取屬性。

XPath 使用路徑表達式在 XML 文檔中選取節點。節點是通過沿着路徑或者 step 來選取的。下面列出了最有用的路徑表達式:

 

 

 

路徑表達式

結果

bookstore

選取 bookstore 元素的所有子節點。

/bookstore

選取根元素 bookstore

注釋:假如路徑起始於正斜杠( / ),則此路徑始終代表到某元素的絕對路徑!

bookstore/book

選取屬於 bookstore 的子元素的所有 book 元素。

//book

選取所有 book 子元素,而不管它們在文檔中的位置。

bookstore//book

選擇屬於 bookstore 元素的后代的所有 book 元素,而不管它們位於 bookstore 之下的什么位置。

//@lang

選取名為 lang 的所有屬性。

在下面的表格中,我們已列出了一些路徑表達式以及表達式的結果:

 

 

2.2.4 Xpath語法之謂語(Predicates)

謂語用來查找某個特定的節點或者包含某個指定的值的節點。

謂語被嵌在方括號中。

在下面的表格中,我們列出了帶有謂語的一些路徑表達式,以及表達式的結果:

路徑表達式

結果

/bookstore/book[1]

選取屬於 bookstore 子元素的第一個 book 元素。

/bookstore/book[last()]

選取屬於 bookstore 子元素的最后一個 book 元素。

/bookstore/book[last()-1]

選取屬於 bookstore 子元素的倒數第二個 book 元素。

/bookstore/book[position()<3]

選取最前面的兩個屬於 bookstore 元素的子元素的 book 元素。

//title[@lang]

選取所有擁有名為 lang 的屬性的 title 元素。

//title[@lang='eng']

選取所有 title 元素,且這些元素擁有值為 eng lang 屬性。

/bookstore/book[price>35.00]

選取 bookstore 元素的所有 book 元素,且其中的 price 元素的值須大於 35.00

/bookstore/book[price>35.00]//title

選取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值須大於 35.00

 

 

2.2.5 Xpath語法之選取未知節點

XPath 通配符可用來選取未知的 XML 元素。

通配符

描述

*

匹配任何元素節點。

@*

匹配任何屬性節點。

node()

匹配任何類型的節點。

 

在下面的表格中,我們列出了一些路徑表達式,以及這些表達式的結果:

路徑表達式

結果

/bookstore/*

選取 bookstore 元素的所有子元素。

//*

選取文檔中的所有元素。

//title[@*]

選取所有帶有屬性的 title 元素。

 

2.2.6 Xpath語法之選取若干路徑

通過在路徑表達式中使用"|"運算符,您可以選取若干個路徑。

在下面的表格中,我們列出了一些路徑表達式,以及這些表達式的結果:

路徑表達式

結果

//book/title | //book/price

選取 book 元素的所有 title price 元素。

//title | //price

選取文檔中的所有 title price 元素。

/bookstore/book/title | //price

選取屬於 bookstore 元素的 book 元素的所有 title 元素,以及文檔中所有的 price 元素。

 

 

3. 腳本編寫進階

3.1 創建關鍵字和公共方法

3.1.1 創建關鍵字

在文件夾右鍵點擊創建一個resource文件,隨后在resource文件右鍵,new user keyword,這個就是封裝一個用戶的關鍵字

 

如下,由於登錄會在很多地方使用,所以封裝成一個登錄的關鍵字

 

 

3.1.2 使用關鍵字

在Login測試套件里面的setting中,添加resource文件,commonkeywords.robot添加進去

 

隨后,testcase里面,可以直接使用這個關鍵字,引用了的關鍵字為藍色,未引用的是黑色。

 

3.1.3 Py文件的方法

當前庫里的關鍵字沒有辦法滿足寫腳本的時候,可以自己寫一個方法,隨后把這個processMonitor.py文件作為library導入到rf中進行使用

 

下圖為這個processMonitor.py文件中的腳本

 

引用processMonitor.py文件

 

使用這個processMonitor.py文件中的方法

 

 

3.2 創建公共變量

在Test_var下創建一個resource文件

隨后在resource文件下右鍵,創建一個new scalar文件

 

填寫數據如下,在當前的項目底下,都可以引用url,前提是要把resource文件引用,就可以正常使用公共變量

 

在另外的文件下應用公共變量

 

 

 

3.3 Selenium2Library關鍵字

3.3.1 常用關鍵字

1、 log就是“print”robotframework中,log關鍵字就是編程語言里的“print”一樣,可以打印任何你想打印的內容 如:log hello world

2、 open browser打開瀏覽器

3、 Click Button [ locator ] 點擊被'locator'標識的按鈕。

4、 Click Element [locator]點擊被'locator'標識的元素。

5、 Close All Browsers [ ]關掉所有打開的瀏覽器,並且重置這些瀏覽器的緩存;這個關鍵字被執行之后,從'Open Browser'關鍵字返回的新的索引被重置為1;這個關鍵字應該被用在test或者suite的teardown中,以確保所有瀏覽器被關閉

6、 Close Browser [ ]關閉當前運行的瀏覽器。

7、 input text    在文本框中錄入內容

8、 input password    在文本框中錄入密碼

9、 click button    點擊按鈕

10、 page should  (NOT)contain (link,button,element,checkbox,list)   頁面是否出現指定的內容

11、 下拉列表select from list xpath value

select from list by value    xpath value

select from list by index    xpath value

12、 選中框架select frame

取消框架unselect frame

13、 復選框select checkbox    id=CheckYes

取消復選框unselect checkbox    id=CheckNo   

14、 單選框select radio button    radio1---單選框名稱

15、 等待頁面加載wait until page contains element

16、 休息sleep

17、 reload page---刷新

18、 注釋Comment

 

3.3.2 其他關鍵字

1、 Add Cookie [ name | value | path=None | domain=None | secure=None | expiry=None ]給你當前的會話增加一個cookie。"name"和"value","path","domain"和"secure"是可選項。

2、 Alert Should Be Present [text=]驗證Alert是否存在並且消除它。如果'text'不是空字符串,它會驗證alert上的信息是否與'text'一致。
當然,如果alert不存在,測試將會失敗。注意,除非通過這個關鍵字或者別的關鍵字像'Get Alert Message'消除alert,否則后面執行的關鍵字會失敗。

3、 Assign ID [ locator | id ]分配一個臨時的標識符給一個元素,首先通過'locator'來定位這個元素。當定位該元素的Xpath表達式很復雜時,這種方法非常有用。此外,當頁面重新載入時,這個標識符就到期了。

4、 Capture Page Screenshot [ filename=None ]在當前頁面上截屏,並把它放在日志里。'filename'參數指定了一個元素的名稱並把截屏寫入。如果沒有提供'filename',截屏將會被保存在'selenium-screenshot-<counter>.png'文件中,該文件就在RF日志文件被寫入的目錄下。'css'可以被用來改變截屏的執行方式。當頁面布局以某種方法被破壞時,可通過改變默認的背景顏色去避免可能的背景泄露問題。

5、 Checkbox Should Be Selected [ locator ]驗證'locator'標識的checkbox是否被選定。

6、 Checkbox Should Not Be Selected [ locator ]驗證'locator'標識的checkbox沒有被選定。

7、 Choose Cancel On Next Confirmation [ ]下次'Confirm Action'被使用時,撤銷將會被選定。

8、 Choose File [ locator | file_path ]'file_path'寫入被標識的文件寫入區域。這個關鍵字被經常使用去將文件寫入到上傳表格中。由'file_path'指定的文件必須存在於Selenium Server 運行的主機上。

9、 Choose Ok On Next Confirmation [ ]取消使用'Choose Cancel on Next Confirmation'這個關鍵字的影響。注意,Selenium的重寫window.confirm()函數通常會自動返回true,就好似用戶手動的點擊OK,所以你應該不需要這個命令,除非你需要改變你的next confirmation的首選項因為某些原因。在任一confirmation之后,Selenium將會為未來的confirmatons恢復使用默認值,自動的返回true(OK)除非你明確的對每一個confirmation使用'Choose Cancel On Next Confirmation'。還要注意每次一個confirmation開始時,你必須使用'Get Alert Mseeage'等類似的關鍵字,不然selenium接下來的操作將會失敗。

10、 Click Element At Coordinates [ ]點擊被'locator'標識的元素,以該元素的x/y坐標為基准。鼠標移動到該元素的中心,x/y坐標就從那一點被計算出來。

11、 Click Image [ ]點擊被'locator'標識的圖片。

12、 Click Link [ ]點擊被'locator'標識的鏈接。

13、 Close Window [ ]關閉當前彈出的窗口。

14、 Confirm Action [ ]關閉當前顯示的會話並返回它的信息。這個關鍵字會默認選擇會話中的'OK'。如果需要選擇‘Cancel’,關鍵字'Choose Cancel On Next Confirmation'必須在引起確認會話被顯示的行為之前被調用。

15、 Current Frame Contains [text|loglevel=INFO]核實當前frame是否包含'text'。

16、 Current Frame Should Not Contain [text|loglevel=INFO]核實當前frame是否包含'text'。

17、 Delete All Cookies []刪除所有cookies。

18、 Delete Cookie [name]刪除匹配'name'的cookie。如果這個cookie沒有被發現,什么事都不會發生。

19、 Double Click Element [locator]雙擊被'locator'標識的元素。

20、 Drag And Drop [source|target]拖拽被'source‘ (實際是一個'locator')定位的元素。元素可被移動到其它目標元素之上。'target'是一個元素定位器,指定了拖拽住的元素松開的位置。

21、 Drop And Drop By Offset [source|xoffset|yoffset]拖拽被'source‘ (實際是一個'locator')定位的元素。元素將會被移動到坐標xoffset和yoffset指定的位置。坐標可以是正數也可是負數。

22、 Element Should Be Disabled [locator]驗證被'locator'指定的元素是否可用。

23、 Element Should Be Enabled [locator]驗證被'locator'指定的元素是否可用。

24、 Element Should Be Visible []驗證被'locator'指定的元素是否可見。這里,可見指的是邏輯可見,而不是在當前瀏覽器窗口上的視覺可見。舉個例子,一個元素呈現為none,那么該元素就是邏輯上不可見的,所以在這個元素上使用此關鍵字將會失敗。

25、 Element Should Contain [loactor|expected|message=]驗證被'locator'定位的元素是否包含文本'expected'。如果你想要在元素的文本里斷言一個精確的匹配而不是一個子串,使用關鍵字'Element Text Should Be'。'message'可被用於覆蓋默認的錯誤信息。

26、 Element Should Not Be Visible [locator|message=]驗證被'locator'定位的元素是不可見的。是關鍵字'Element Should Be Visible'的反義。'message'可被用於覆蓋默認的錯誤信息。

27、 Element Text Should Be [locator|expected|message=]驗證被'locator'定位的元素是否精確的包含文本'expected'。與'Element Should Contain'形成對比,這個關鍵字不是在被'locator'標識的元素上嘗試子串匹配,而是精確匹配。

28、 Execute Async Javascript [*code]執行異步JS代碼。'code'可能含有很多行代碼,但是最后必須包含一個返回狀態(即要有返回值)。'code'也許在測試數據中被分成很多單元。即便如此,彼此關聯的部分不允許增加任何空間。如果'code'是一個指向一個存在的文件的完整的路徑,JS將從這個文件中讀取並執行。分隔號'/'用於所有操作系統的路徑分隔。注意,默認地,代碼將會在Selenium對象自己的環境中執行。所以,'this'將會適用於the Selenium 對象。使用'window'去適用於你的應用的窗口。例如,'window.document.getElementById('foo')'.

29、 Execute Javascript [*code]執行提供的js代碼。

30、 Focus [locator]設置被'locator'定位的元素為焦點。

31、 Frame Should Contain [locator|text|loglevel=INFO]驗證被'locator'定位的'frame'是否包含'text'。

32、 Get Alert Message []返回當前js alert里的內容。如果當前沒有alert,這個關鍵字將會失敗。注意,接下來的關鍵字將會失敗除非alert通過這個關鍵字或者'Get Alert Message'被消除。

33、 Get All Links []返回一個列表,該列表包含當前頁面所有鏈接的id。如果一個鏈接沒有id,這個列表將含有一個空的字符串。

34、 Get Cookie Value [name]返回名稱為'name'的cookie的值。如果沒有cookie叫'name',這個關鍵字失敗。

35、 Get cookies []返回當前頁面的所有cookie。

36、 Get Element Attribute [attribute_locator]返回元素屬性的值。屬性定位器'attribute_locator'由標識@和屬性名稱組成,如"element_id@class"

37、 Get Horizontal Position [locator]返回被'locator'定位的元素的水平位置。位置作為正數類型被返回到頁面左側的像素位置。如果沒有找到匹配的元素,將會失敗。

38、 Get List Items [locator]從已被'locator'定位select list中返回值。Select list 關鍵字工作在每個列表和組合框中。select list的關鍵屬性是'id'和'name'。

39、 Get Location []返回當前的位置。

40、 Get Matching Xpath Count [xpath]返回匹配'xpath'的若干元素。如果你想斷言若干匹配的元素,使用'Xpath Should Match X Times'.

41、 Get Selected List Label [locator]從被'locator'定位的select list中返回可見的選項元素的標簽。Select list 關鍵字工作在每個列表和組合框中。select list的關鍵屬性是'id'和'name'。

42、 Get Selected List Labels [locator]從被'locator'定位的select list中返回可見的選項元素的標簽(作為一個列表)如果沒有選項將會失敗。

43、 Get Selected List Value [locator]從被'locator'標識的的select list中返回選中的元素的值。返回值被選中的元素的'value'屬性讀取。Select list 關鍵字工作在每個列表和組合框中。select list的關鍵屬性是'id'和'name'。

44、 Get Selected List Values [locator]從被'locator'標識的的select list中返回選中的元素的值(作為一個列表)。返回值被選中的元素的'value'屬性讀取。Select list 關鍵字工作在每個列表和組合框中。select list的關鍵屬性是'id'和'name'。

45、 Get Selenium Implicit Wait []獲取Selenium隱式等待時間。

46、 Get Selenium Speed []獲取每一條執行Selenium命令時的延遲等待時間。

47、 Get Selenium Timeout []在短時間內獲取timeout,被不同的關鍵字使用。

48、 Get Source []從當前頁面或框架返回整個html源。

 

 

3.4 RF使用小技巧及問題

3.2.1 關鍵字聯想

不清楚關鍵字全稱的時候,可以輸入幾個單子,隨后點擊Ctrl+Alt+Space聯想,如下圖

 

 

 

3.2.2 查看庫內所有的關鍵字

RF中點擊F5,出現搜索關鍵字的顯示框,可以在里面對每個庫的關鍵字進行查看以及搜索

 

 

3.2.3 定位不到元素1

定位不到元素很有可能是因為前段頁面有iframe擋住了

 

 

解決方法:

先從最里面的元素開始一級一級往上找,找到iframe,然后先select frame這個ID就可以定位到里面的元素了。

 

3.2.4 定位不到元素2

1xpath定位一個button,不生效

解決:該元素不是一個button,需要用click element

不要使用Click Button關鍵字-嚴格來說,該關鍵字適用於該<button>類型的html元素。

而是使用Click Element-您的目標元素是<a>,然后Click Elements瀏覽器將對其執行單擊

原本Click Button     //*[@id="app"]/div[1]/div[2]/ul/li[2]/a

改成Click Element    xpath=//*[@id="app"]/div[1]/div[2]/ul/li[2]

 

2、 頁面操作按鈕提示找不到elements

click button id=carInfoSubmitBtn

改為click element id=carInfoSubmitBtn

 

3、 InvalidElementStateException: Message: u'Element must not be hidden, disabled or read-only'出現這個現象是因為腳本執行快,而頁面的元素還沒有加載完成造成的

解決方案:等待頁面加載wait until page contains elementsleep

4、 

5、 

6、 

 

 

 

3.2.5 /html開頭的xpath路徑

需要在簽名加上Xpath=

根據錄入框內容彈出框框,定位不到元素,采用相對路徑的方式定位,用firefox瀏覽器打開地址,按F12獲取元素位置,右擊---選擇復制XPATH

放在腳本中形式為:xpath=/html/body/div[9]/div[2]/table/tbody/tr[4]/td[4]

 

3.2.6 進程中很多chromedriver.exe進程

 

把上述文件放在當前項目的自定義文件夾下隨后在腳本中引用

引用方式為:processMonitor.Find Killproc

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM