1. 程式人生 > >selenium對瀏覽器操作、滑鼠操作等總結

selenium對瀏覽器操作、滑鼠操作等總結

1 控制瀏覽器

Selenium 主要提供的是操作頁面上各種元素的方法,但它也提供了操作瀏覽器本身的方法,比如瀏覽器的大小以及瀏覽器後退、前進按鈕等。

1.1 控制瀏覽器視窗大小

  • 在不同的瀏覽器大小下訪問測試站點,對測試頁面截圖並儲存,然後觀察或使用影象比對工具對被測頁面的前端樣式進行評測。比如可以將瀏覽器設定成移動端大小(480x800),然後訪問移動站點,對其樣式進行評估;WebDriver 提供了set_window_size() 方法來設定瀏覽器的大小。
    例子:

    #coding=utf-8
    from selenium import webdriver
    driver = webdriver.Firefox()
    driver.get("http://192.168.30.180/Uet-Platform/"
    ) #引數數字為畫素點 print "****設定瀏覽器寬480、高800 顯示"** driver.set_window_size(480, 800)** driver.quit()
  • 在PC 端執行執行自動化測試指令碼大多的情況下是希望瀏覽器在全螢幕模式下執行,那麼可以使用maximize_window()方法,其用法與set_window_size() 相同,但它不需要傳參。

1.2 控制瀏覽器後退和前進

  • 在使用瀏覽器瀏覽網頁的時候,瀏覽器提供了後退和前進按鈕,可以方便的對瀏覽過的網頁之間切換,那麼WebDriver 也提供了對應的back()和forward()方法來模擬後退和前進按鈕。下面通過例子來演示這兩個方法的使用。

    例子:

    #coding=utf-8
    from selenium import webdriver
    driver = webdriver.Firefox()
    #訪問百度首頁
    first_url= 'http://www.baidu.com'
    print "now access %s" %(first_url)
    driver.get(first_url)
    #****訪問新聞頁面**
    second_url='http://news.baidu.com'
    print "now access %s" %(second_url)
    driver.get(second_url)
    #****返回(後退)到百度首頁
    print
    "back to %s "%(first_url) driver.back() #****前進到新聞頁 print "forward to %s"%(second_url) driver.forward() driver.quit()

1.3 模擬重新整理瀏覽器

有時候需要手動的重新整理(F5)的重新整理頁面

  driver.refresh() 
  #****重新整理當前頁面**

2 元素操作

2.1 常用的元素操作

1、clear() 清除文字,如果是一個檔案輸入框
2、send_keys(*value) 在元素上模擬按鍵輸入
3、click() 單擊元素

例子:

#coding=utf-8
from selenium import webdriver
import unittest, time, re
driver = webdriver.Firefox()
driver.implicitly_wait(30)
base_url ="http://192.168.30.180/Uet-Platform/masterLogin.action"  #30****測試環境**
driver.get(base_url)
driver.find_element_by_id("txtUserName").clear()
driver.find_element_by_id("txtUserName").send_keys("13554797004")
driver.find_element_by_id("txtPassword").clear()
driver.find_element_by_id("txtPassword").send_keys("123123")
driver.find_element_by_link_text(u"登入").click()
driver.switch_to_frame("lj_left")
driver.find_element_by_xpath("//div[@id='left']/table/tbody/tr[6]/td").click()
driver.find_element_by_link_text(u"****使用者單位管理").click()
  • 說明:
    clear()方法用於清除文字輸入框中的內容,例如登入框內一般預設會有“賬號”“密碼”等提示資訊用於引導使用者輸入正確的資料,如果直接向輸入框中輸入資料,可能會與輸入框中的提示資訊拼接,本來使用者輸入為“username”,結果與提示資訊拼接為“帳號username”,從而造成輸入資訊的錯誤;這個時候
    可以先使用clear()方法清除輸入框內的提示資訊再進行輸入。
    send_keys()方法模擬鍵盤輸入向輸入框裡輸入內容。如上面的例子中通過這個方法向用戶名和密碼框中輸入使用者名稱和密碼。
    click()方法可以用來單擊一個按鈕,前提是它是可以被點選元素,它與send_keys()方法是web 頁面操作中最常用到的兩個方法。其實click()方法不僅僅用於點選一個按鈕,還可以單擊任何可以點選文字/圖片連線、複選框、單選框、甚至是下拉框等。

2.2 WebElement 介面常用方法

1、submit()

  • submit()方法用於提交表單,這裡特別用於沒提交按鈕的情況,例如搜尋框輸入關鍵字之後的“回車”操作,那麼就可以通過submit()來提交搜尋框的內容。

例子:

#coding=utf-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://www.youdao.com")
driver.find_element_by_id('query').send_keys('hello')
#提交輸入框的內容
driver.find_element_by_id('query').submit()
driver.quit()
  • 有些時候submit()可以與click()方法互換來使用,submit()同樣可以提交一個按鈕。
  • size 返回元素的尺寸。

  • text 獲取元素的文字。

  • get_attribute(name) 獲得屬性值。

  • is_displayed() 設定該元素是否使用者可見。

例子:

#coding=utf-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
#****獲得輸入框的尺寸
size=driver.find_element_by_id('kw').size
print size
#****返回百度頁面底部備案資訊
text=driver.find_element_by_id("cp").text
print text
#返回元素的屬性值,可以是id、name、type 或元素擁有的其它任意屬性
attribute=driver.find_element_by_id("kw").get_attribute('type')
print attribute
#返回元素的結果是否可見,返回結果為True 或False
result=driver.find_element_by_id("kw").is_displayed()
print result
driver.quit()

執行結果:
{'width': 526, 'height': 22}
©2014 Baidu 使用百度前必讀京ICP 證030173 號
True

  • 解析:
    執行上面的程式並獲得執行結果:size 用於獲取百度輸入框的寬、高。text 用於獲得百度底部的備案資訊。get_attribute()用於獲百度輸入的type 屬性的值。is_displayed()用於返回一個元素是否可見,如果可見返回True,否則返回False。

3 滑鼠事件

  • 在現在的web 產品中,隨著前端技術的發展,頁面越來越華麗,滑鼠的操作也不單單隻有單擊,現在頁面中隨處可以看到需要右擊、雙擊、滑鼠懸停、甚至是滑鼠拖動等操作的功能設計。在WebDriver 中這些關於滑鼠操作的方法由ActionChains 類提供。

3.1 ActionChains 類提供的滑鼠操作的常用方法

  • perform() 執行所有ActionChains 中儲存的行為
  • click_and_hold(element)左鍵點選
  • context_click(elem) 右擊
  • double_click(elem) 雙擊
  • drag_and_drop(source,target) 拖動
  • move_to_element(elem) 滑鼠懸停

例子1:滑鼠右擊操作

對於ActionChains 類下所提供的滑鼠方法與前面學過的click()方法有所不同,那麼簡單context_click()右鍵點選一個元素。

程式碼實現:

from selenium import webdriver
*#引入ActionChains 類*
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Firefox()
driver.get("http://yunpan.360.cn")
#****定位到要右擊的元素**
right_click =driver.find_element_by_id("xx")
#****對定位到的元素執行滑鼠右鍵操作
ActionChains(driver).context_click(right_click).perform()
  • 說明:
    from selenium.webdriver import ActionChains
    對於ActionChains 類下面的方法,在使用之前需要先將模組匯入。
    ActionChains(driver)
    呼叫ActionChains()方法,在使用將瀏覽器驅動driver 作為引數傳入。
    context_click(right_click)
    context_click()方法用於模擬滑鼠右鍵事件,在呼叫時需要傳入右鍵的元素。
    perform()
    執行所有ActionChains 中儲存的行為,可以理解成是對整個操作事件的提交動作。

例子2:滑鼠懸停
滑鼠懸停彈出下拉選單也是一個非常見的一個功能設計

  • move_to_element()方法可以模擬滑鼠懸停的動作,其用法與context_click()相同。

程式碼實現:

from selenium import webdriver
#引入ActionChains 類
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
#定位到要懸停的元素
above =driver.find_element_by_id("xx")
#對定位到的元素執行懸停操作
ActionChains(driver).move_to_element(above).perform()
...

例子3:滑鼠雙擊操作

  • double_click(on_element)方法用於模擬滑鼠雙擊操作,用法同上。

程式碼實現:

from selenium import webdriver
#引入ActionChains 類
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Firefox()

#定位到要懸停的元素
double_click = driver.find_element_by_id("xx")
#對定位到的元素執行雙擊操作
ActionChains(driver).double_click(double_click).perform()

例子4:滑鼠推放操作

  • drag_and_drop(source, target)在源元素上按下滑鼠左鍵,然後移動到目標元素上釋放。
    • source: 滑鼠拖動的源元素。
    • target: 滑鼠釋放的目標元素。

程式碼實現:

from selenium import webdriver
#引入ActionChains 類
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Firefox()

#定位元素的源位置
element = driver.find_element_by_name("xxx")
#定位元素要移動到的目標位置
target = driver.find_element_by_name("xxx")
#執行元素的拖放操作
ActionChains(driver).drag_and_drop(element,target).perform()

4 鍵盤事件

  • 有時候我們在測試時需要使用Tab 鍵將焦點轉移到下一個元素,Keys()類提供鍵盤上幾乎所有按鍵的方法,前面瞭解到send_keys()方法可以模擬鍵盤輸入,除此之外它還可以模擬鍵盤上的一些組合鍵,例:Ctrl+A、Ctrl+C 等。

4.1 鍵盤操作

 from selenium.webdriver.common.keys import Keys
  #在使用鍵盤按鍵方法前需要先匯入keys 類包。

下面經常使用到的鍵盤操作:

    send_keys(Keys.BACK_SPACE) 刪除鍵(BackSpacesend_keys(Keys.SPACE) 空格鍵(Space)
    send_keys(Keys.TAB) 製表鍵(Tab)
    send_keys(Keys.ESCAPE) 回退鍵(Escsend_keys(Keys.ENTER) 回車鍵(Entersend_keys(Keys.CONTROL,'a') 全選(Ctrl+Asend_keys(Keys.CONTROL,'c') 複製(Ctrl+Csend_keys(Keys.CONTROL,'x') 剪下(Ctrl+Xsend_keys(Keys.CONTROL,'v') 貼上(Ctrl+Vsend_keys(Keys.F1) 鍵盤F1
    ……
    send_keys(Keys.F12) 鍵盤F12

例子:

#coding=utf-8
from selenium import webdriver
#引入Keys 模組
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
#輸入框輸入內容
driver.find_element_by_id("kw").send_keys("seleniumm")
#刪除多輸入的一個m
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
#輸入空格鍵+“教程”
driver.find_element_by_id("kw").send_keys(Keys.SPACE)
driver.find_element_by_id("kw").send_keys(u"教程")
#ctrl+a 全選輸入框內容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
#ctrl+x 剪下輸入框內容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
#ctrl+v 貼上內容到輸入框
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'v')
#通過回車鍵盤來代替點選操作
driver.find_element_by_id("su").send_keys(Keys.ENTER)
driver.quit()

5 設定元素等待

  • 如今大多數的web 應用程式使用AJAX 技術。當瀏覽器在載入頁面時,頁面內的元素可能並不是同時被載入完成的, 這給元素的定位新增的困難。如果因為在載入某個元素時延遲而造成ElementNotVisibleException 的情況出現,那麼就會降低的自動化指令碼的穩定性。
    WebDriver 提供了兩種型別的等待:顯式等待和隱式等待。

5.1 顯式等待

  • 顯式等待使WebdDriver 等待某個條件成立時繼續執行,否則在達到最大時長時拋棄超時異常(TimeoutException)。
    例子:

    #coding=utf-8
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    driver = webdriver.Firefox()
    driver.get("http://www.baidu.com")
    element = WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,"kw")))
    element.send_keys('selenium')
    driver.quit()
  • WebDriverWait()
    它是由webdirver 提供的等待方法。在設定時間內,預設每隔一段時間檢測一次當前頁面元素是否存
    在,如果超過設定時間檢測不到則丟擲異常。具體格式如下:
    WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
    driver - WebDriver 的驅動程式(Ie, Firefox,Chrome 等)
    timeout - 最長超時時間,預設以秒為單位
    poll_frequency - 休眠時間的間隔(步長)時間,預設為0.5 秒
    ignored_exceptions - 超時後的異常資訊,預設情況下拋NoSuchElementException 異常。

  • until()
    WebDriverWait()一般由until()(或until_not())方法配合使用,下面是until()和until_not()方法的說明。
    until(method, message=’ ’)
    呼叫該方法提供的驅動程式作為一個引數,直到返回值為Ture。
    until_not(method, message=’ ’)
    呼叫該方法提供的驅動程式作為一個引數,直到返回值為False。

  • Expected Conditions
    在本例中,我們在使用expected_conditions 類時對其時行了重新命名,通過as 關鍵字對其重新命名為EC,
    並呼叫presence_of_element_located()判斷元素是否存在。
    expected_conditions 類提供一些預期條件的實現。
    title_is 用於判斷標題是否xx。
    title_contains 用於判斷標題是否包含xx 資訊。
    presence_of_element_located 元素是否存在。
    visibility_of_element_located 元素是否可見。
    visibility_of 是否可見
    presence_of_all_elements_located 判斷一組元素的是否存在
    text_to_be_present_in_element 判斷元素是否有xx 文字資訊
    text_to_be_present_in_element_value 判斷元素值是否有xx 文字資訊
    frame_to_be_available_and_switch_to_it 表單是否可用,並切換到該表單。
    invisibility_of_element_located 判斷元素是否隱藏
    element_to_be_clickable 判斷元素是否點選,它處於可見和啟動狀態
    staleness_of 等到一個元素不再是依附於DOM。
    element_to_be_selected 被選中的元素。
    element_located_to_be_selected 一個期望的元素位於被選中。
    element_selection_state_to_be 一個期望檢查如果給定的元素被選中。
    element_located_selection_state_to_be 期望找到一個元素並檢查是否選擇狀態
    alert_is_present 預期一個警告資訊

    除了expected_conditions 所提供的預期方法,我們也可以使用前面學過的is_displayed()方法來判斷元素是否可。

例子:

#coding=utf-8
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
input_ = driver.find_element_by_id("kw")
element = WebDriverWait(driver,5,0.5).until(
lambda driver : input_.is_displayed()
)
input_.send_keys('selenium')
driver.quit()

5.2 隱式等待

  • 隱式等待是通過一定的時長等待頁面所元素載入完成。哪果超出了設定的時長元素還沒有被載入測拋NoSuchElementException 異常。WebDriver 提供了implicitly_wait()方法來實現隱式等待,預設設定為0。它的用法相對來說要簡單的多。

例子:

#coding=utf-8
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
input_ = driver.find_element_by_id("kw22")
input_.send_keys('selenium')
driver.quit()
  • implicitly_wait()預設引數的單位為秒,本例中設定等待時長為10 秒,首先這10 秒並非一個固定的等待時間,它並不影響指令碼的執行速度。其次,它並不真對頁面上的某一元素進行等待,當指令碼執行到某個元素定位時,如果元素可定位那麼繼續執行,如果元素定位不到,那麼它將以輪詢的方式不斷的判斷元素
    是否被定位到,假設在第6 秒鐘定位到元素則繼續執行。直接超出設定時長(10 秒)還沒定位到元素則丟擲異常。
    在上面的例子中,顯然百度輸入框的定位id=kw22 是有誤的,那麼在超出10 秒後將丟擲異常。

5.3 sleep 休眠方法

  • 有時間我們希望指令碼執行到某一位置時做固定時間的休眠,尤其是在指令碼除錯的過程中。那麼可以使用sleep()方法,需要說明的是sleep()由Python 的time 模組提供。

例子:

#coding=utf-8
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
sleep(2)
driver.find_element_by_id("kw").send_keys("webdriver")
driver.find_element_by_id("su").click()
sleep(3)
driver.quit()
  • 當執行到sleep()方法時會固定的休眠所設定的時長,然後再繼續執行。sleep()方法預設引數以秒為單位,如果設定時長小於1 秒,可以用小數點表示,如:sleep(0.5)

6 多表單切換

  • 在web 應用中經常會遇到frame 巢狀頁面的應用,頁WebDriver 每次只能在一個頁面上識別元素,對於frame 巢狀內的頁面上的元素,直接定位是定位是定位不到的。這個時候就需要通過switch_to_frame()方法將當前定位的主體切換了frame 裡。

例子:

#coding=utf-8
from selenium import webdriver
import time
import os
driver = webdriver.Firefox()
file_path = 'file:///' + os.path.abspath('frame.html')
driver.get(file_path)
#****切換到iframe(id = "if")
driver.switch_to_frame("if")
#****下面就可以正常的操作元素了
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
time.sleep(3)
driver.quit()
  • switch_to_frame() 預設可以直接取表單的id 或name 屬性進行切換。

    #id = "if"
    driver.switch_to_frame("if")
    #name = "nf"
    driver.switch_to_frame("nf")
  • 那麼如果iframe 沒有可用的id 和name 可以通過下面的方式進行定位:

    #先通過xpth 定位到iframe
    xf = driver.find_element_by_xpath('//*[@class="if"]')
    #再將定位物件傳給switch_to_frame()方法
    driver.switch_to_frame(xf)
    driver.switch_to_default_content()
  • 如果完成了在當前表單上的操作可以通過switch_to_default_content()方法返回到上一層單。該方法不用指定某個表單的返回,預設對應與它最近的switch_to_frame()方法。

7 多視窗切換

  • 有時候需要在不同的視窗切換,從而操作不同的視窗上的元素,WebDriver 提供了switch_to_window()方法可以切換到任意的視窗。

圖 多視窗
這裡以百度首頁與註冊頁為例,演示在不同視窗切換。

例子:

#coding=utf-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
#****獲得百度搜索視窗控制代碼
sreach_windows= driver.current_window_handle
driver.find_element_by_link_text(u'****登入').click()
driver.find_element_by_link_text(u"****立即註冊").click()
#****獲得當前所有開啟的視窗的控制代碼
all_handles = driver.window_handles
#****進入註冊視窗
for handle in all_handles:
if handle != sreach_windows:
driver.switch_to_window(handle)
print 'now register window!'
driver.find_element_by_name("account").send_keys('username')
driver.find_element_by_name('password').send_keys('password')
#****進入搜尋視窗**
for handle in all_handles:
if handle == sreach_windows:
driver.switch_to_window(handle)
print 'now sreach window!'
driver.find_element_by_id('TANGRAM__PSP_2__closeBtn').click()
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
time.sleep(5)
driver.quit()
  • 說明
    整個指令碼的處理過程:首先開啟百度首頁,通過current_window_handle 獲得當前視窗的控制代碼,並給變數sreach_handle。接著開啟登入彈窗,在登入視窗上點選“立即註冊”從而開啟新的註冊視窗。通過window_handles 獲得當前開啟的所視窗的控制代碼,賦值給變數all_handles。
    第一個迴圈遍歷all_handles,如果handle 不等於sreach_handle,那麼一定是註冊視窗,因為指令碼執行只打開的兩個視窗。所以,通過switch_to_window()切換到註冊頁進行註冊操作。第二個迴圈類似,不過這一次判斷如果handle 等於sreach_handle,那麼切換到百度搜索頁,關閉之前開啟的登入彈窗,然後時行搜尋操作。
    在本例中所有用到的新方法:
    current_window_handle 獲得當前視窗控制代碼
    window_handles 返回的所有視窗的控制代碼到當前會話
    switch_to_window()
    用於切換到相應的視窗,與上一節的switch_to_frame() 是類似,前者用於不同視窗的切換,後者用於不同表單之間的切換。

8 警告框處理

  • 在WebDriver 中處理JavaScript 所生成的alert、confirm 以及prompt 是很簡單的。具體做法是使用switch_to_alert()方法定位到alert/confirm/prompt。然後使用text/accept/dismiss/send_keys 按需進行操做。
  • text 返回alert/confirm/prompt 中的文字資訊。

  • accept 點選確認按鈕。

  • dismiss 點選取消按鈕,如果有的話。

  • send_keys 輸入值,這個alert\confirm 沒有對話方塊就不能用了,不然會報錯。


百度搜索儲存設定彈窗
  • 如圖 百度搜索設定的彈出的彈窗是不能通過前端工具對其進行定位的,這個時候就可以通過switch_to_alert()方法接受這個彈窗。

例子:

#coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get('http://www.baidu.com')
#滑鼠懸停相“設定”連結
link = driver.find_element_by_link_text(u'設定')
ActionChains(driver).move_to_element(link).perform()
#開啟搜尋設定
driver.find_element_by_class_name('setpref').cick()
#儲存設定
driver.find_element_by_css_selector('#gxszButton > a.prefpanelgo').click()
#接收彈窗
driver.switch_to_alert().accept()
driver.quit()

9 上傳檔案

  • 檔案上傳操作也比較常見功能之一,上傳功能操作webdriver 並沒有提供對應的方法,關鍵上傳檔案的思路。
  • 對web 頁面的上功能,點選“上傳”按鈕需要開啟本地的Window 視窗,從視窗選擇本地檔案進行上傳,那麼WebDriver 對於Windows 的控制元件是無能為力的

  • 對於web 頁面的上傳功能一般會有以下幾種方式。

    • 普通上傳:普通的附件上傳都是將本地檔案的路徑作為一個值放input 標籤中,通過form 表單提交的時候將這個值提交給伺服器。
    • 外掛上傳:一般是指基於Flash 與JavaScript 或Ajax 等技術所實現的上傳功能或外掛。

9.1 send_keys 實現上傳

  • 對於通過input 標籤實現的通過上傳,可以將其看作一個輸入框,通過send_keys()傳入本地檔案路徑從而模擬上傳功能。

例子:

#coding=utf-8
from selenium import webdriver
import os
driver = webdriver.Firefox()
#開啟上傳功能頁面
file_path = 'file:///' + os.path.abspath('upfile.html')
driver.get(file_path)
#定位上傳按鈕,新增本地檔案
driver.find_element_by_name("file").send_keys('D:\\upload_file.txt')
driver.quit()
  • 通過這種方法上傳,就繞開了操作Windows 控制元件的步驟。如果能找上傳的input 標籤,那麼基本都可以通過send_keys()方法向其輸入一個檔案地址來實現上傳。

9.2 AutoIt 實現上傳

  • AutoIt 目前最新是v3 版本,這是一個使用類似BASIC 指令碼語言的免費軟體,它設計用於WindowsGUI(圖形使用者介面)中進行自動化操作。它利用模擬鍵盤按鍵,滑鼠移動和視窗/控制元件的組合來實現自動化任務。
    官方網站:https://www.autoitscript.com/site/
    從網站上下載AutoIt 並安裝,安裝完成在選單中會看到圖的目錄:

AutoIt 選單
  • AutoIt Windows Info 用於幫助我們識Windows 控制元件資訊。
  • Compile Script to.exe 用於將AutoIt 生成exe 執行檔案。
  • Run Script 用於執行AutoIt 指令碼。
  • SciTE Script Editor 用於編寫AutoIt 指令碼。
  • 下面以操作upload.html 上傳彈出的視窗為例講解AutoIt 實現上傳過程。
    1.首先開啟AutoIt Windows Info 工具,滑鼠點選Finder Tool,滑鼠將變成一個小風扇形狀的圖示,按住滑鼠左鍵拖動到需要識別的控制元件上。

AutoIt Windows Info 識別“檔名”輸入框控制元件
AutoIt Windows Info 識別“開啟”按鈕控制元件
  • 如圖,通過AutoIt Windows Info 獲得以下資訊。
    視窗的title 為“選擇要載入的檔案”,標題的Class 為“#32770”。
    檔名輸入框的class 為“Edit”,Instance 為“1” ,所以ClassnameNN 為“Edit1”。
    開啟按鈕的class 為“Button”,Instance 為“1” ,所以ClassnameNN 為“Button1”。

    2.根據AutoIt Windows Info 所識別到的控制元件資訊開啟SciTE Script Editor 編輯器,編寫指令碼。

    ;ControlFocus("title","text",controlID) Edit1=Edit instance 1
    ControlFocus("**選擇要載入的檔案", "","Edit1")
    ; Wait 10 seconds for the Upload window to appear
    WinWait("[CLASS:#32770]","",10)
    ; Set the File name text on the Edit field
    ControlSetText("選擇要載入的檔案", "", "Edit1", "D:\upload_file.txt")
    Sleep(2000)
    ; Click on the Open button
    ControlClick("選擇要載入的檔案", "","Button1");

  • 說明:
    ControlFocus()方法用於識別Window 視窗。WinWait()設定10 秒鐘用於等待視窗的顯示,其用法與WebDriver 所提供的implicitly_wait()類似。ControlSetText()用於向“檔名”輸入框內輸入本地檔案的路徑。這裡的Sleep()方法與Python 中time 模組提供的Sleep()方法用法一樣,不過它是以毫秒為單位,Sleep(2000)表示固定休眠2000 毫秒。ControlClick()用於點選上傳視窗中的“開啟”按鈕。
    AutoIt 的指令碼已經寫好了,可以通過選單欄“Tools”-->“Go” (或按鍵盤F5)來執行一個指令碼吧!
    注意在執行時上傳視窗當前處於開啟狀態。

3、指令碼執行正常,將其儲存為upfile.au3,這裡儲存的指令碼可以通過Run Script 工具將其開啟執行,
但我們的目的是希望這個指令碼被Python 程式呼叫,那麼就需要將其生成exe 程式。開啟Compile Script to.exe
工具,將其生成為exe 可執行檔案。如下圖


圖 Compile Script to.exe 生成exe 程式

點選“Browse”選擇upfile.au3 檔案,點選“Convert”按鈕將其生成為upfile.exe 程式。

4、下面就是通過自動化測試指令碼呼叫upfile.exe 程式實現上傳了。

例子:
#coding=utf-8
from selenium import webdriver
import os
driver = webdriver.Firefox()
#**開啟上傳功能頁面file_path = 'file:///' + os.path.abspath('upfile.html')driver.get(file_path)#**點選開啟上傳視窗
driver.find_element_by_name("file").click()
#**呼叫upfile.exe 上傳程式os.system("D:\upfile.exe")driver.quit()**

通過Python 的os 模組的system()方法可以呼叫exe 程式並執行。

10 操作cookie

  • 有時候我們需要驗證瀏覽器中是否存在某個cookie,因為基於真實的cookie 的測試是無法通過白盒和整合測試完成的。WebDriver 提供了操作Cookie 的相關方法可以讀取、新增和刪除cookie 資訊。

10.1 操作cookie方法

  • webdriver 操作cookie 的方法有:
    1、get_cookies() 獲得所有cookie 資訊
    2、get_cookie(name) 返回有特定name 值有cookie 資訊
    3、add_cookie(cookie_dict) 新增cookie,必須有name 和value 值
    4、delete_cookie(name) 刪除特定(部分)的cookie 資訊
    5、delete_all_cookies() 刪除所有cookie 資訊

  • 下面通過get_cookies()來獲取當前瀏覽器的cookie 資訊。

程式實現:

            
           

相關推薦

selenium瀏覽器操作滑鼠操作總結

1 控制瀏覽器 Selenium 主要提供的是操作頁面上各種元素的方法,但它也提供了操作瀏覽器本身的方法,比如瀏覽器的大小以及瀏覽器後退、前進按鈕等。 1.1 控制瀏覽器視窗大小 在不同的瀏覽器大小下訪問測試站點,對測試頁面截圖並儲存,然後觀察或使用影象比對工具對被測頁面的前端樣式進行評測。比如可以

selenium的鍵盤操作滑鼠操作

在 WebDriver 中, 將這些關於滑鼠操作的方法封裝在 ActionChains 類提供。 ActionChains 類提供了滑鼠操作的常用方法: perform(): 執行所有 ActionChains 中儲存的行為; context_click(): 右擊;

C# 模擬鍵盤滑鼠操作外部程式(模擬使用者操作3DMARK)

1.FROM1 CLASS SOURCE CODE: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; u

linux零碎筆記檔案操作定時任務

統計某資料夾下檔案的個數 ls -l |grep “^-“|wc -l 統計某資料夾下目錄的個數 ls -l |grep “^d”|wc -l 統計資料夾下檔案的個數,包括子資料夾裡的 ls -lR|grep “^-“|wc -l 如統計/home/

HTML5本地儲存localStoragesessionStorage基本用法遍歷操作異常處理

HTML5 的本地儲存 API 中的 localStorage 與 sessionStorage 在使用方法上是相同的,區別在於 sessionStorage 在關閉頁面後即被清空,而 localStorage 則會一直儲存。我們這裡以 localStorage 為例,簡

【四】【python+selenium】pyautogui庫和滑鼠操作介紹

1.pyautogui庫是第三方庫,需要自己下載   pip install pyautogui 2.獲取螢幕解析度    import pyautogui    screenWidth,screenH

Python基礎總結之第九天開始【python之OS模組目錄的操作以及操作檔案】(新手可相互督促)

年薪20萬的夢想。。。         python對檔案、目錄能做什麼?或者說我們需要python替我們做什麼?最經常的操作就是對檔案的:開啟、關閉、讀取、寫入、修改、儲存等等對目錄的操作,無非就是:建立目錄、刪除目錄、更改目錄名字等等。我們先認識一下OS模組,os

如何網課遊戲直播進行錄屏

9.png mage images 一場 pow 攝像頭 sof head 進入 現在網絡直播、網課、遊戲直播越來越流行,但當要對一節網課或一場遊戲直播反復觀看時,該怎麽辦?下面就教大家如何進行錄屏~ 工具/原料 電腦 APOWERSOFT 方法/步驟 1、百度

jquery如何判斷元素是否被點擊屬性操作class操作

data 標誌位 .html 適用於 all true href 獲取 點擊狀態 1、通過點擊事件發生後,改變標誌位的值,記錄點擊狀態 1 function(){ 2 var isClick = false; 3 $(‘#test‘).click(function(){i

mysql庫操作操作

系統數據 update 所在 dmi for 用戶 char 條件 math 系統數據庫information_schema:虛擬庫,主要存儲系統中的一些數據庫對象的信息,例如用戶信息,列信息、權限信息等performance_schema:主要存儲數據庫服務器的性能參數m

MySQL數據庫:SQL語句基礎操作操作數據類型約束條件表之間的關系

顯示 sel 不為 完整性 查看 步長 utf condition 情況下 數據庫相關概念: 1. 數據庫服務器:運行數據庫管理軟件的計算機 2. 數據庫管理軟件:MySQL、Oracle、db2、slqserver 3. 庫:文件夾,用來組織文件/表 4. 表:文件(類似

JQuery:DOM操作屬性操作CSS操作的常用方法

ndt mar dom pin disable cli top .text acea DOM操作 1.append在div1的內部最後追加一個圖片   $("#div1").append("<img src=‘........‘/>"); 2.appendTo把

Docker的安裝鏡像操作容器操作及資源控制

run p地址 讀寫 情況 ffi key pro ada 指定 Docker概述 Docker是在linux容器裏運行應用的開源工具,是一種輕量級的虛擬機。Docker包含三大核心概念,分別是:鏡像、容器和倉庫。Docker的容器技術可以在一臺主機上輕松的為任何應用創建一

02 ndarray的屬性 ndarray的基本操作(索引切片變形連線切分副本)聚合操作矩陣操作排序Panda資料結構Series建立索引與切片屬性與方法運算

二、ndarray的屬性 4個必記引數: ndim:維度 shape:形狀(各維度的長度) size:總長度 dtype:元素型別 import matplotlib.pyplot as plt ndarr = plt.imread("./jin.png") plt.

redis常用操作 redis操作鍵值 redis安全設定

一:redis常用操作 Redis常用操作 (string, list)set key1 aminglinuxget key1set key1 aming//第二次賦值會覆蓋setnx key2 aaa //返回1 如果key2不存在直接建立keysetnx key2 bbb //返回0,如果ke

redis常用操作 redis操作鍵值 redis安全設置

批量 打印 1-1 sele 設置 glin 取消 and 第一個元素 一:redis常用操作 Redis常用操作?(string, list)set key1 aminglinuxget key1set key1 aming//第二次賦值會覆蓋setnx key2 aaa

VIM vim/vi的檔案內跨檔案複製貼上操作替換操作

https://www.cnblogs.com/shengulong/p/6702868.html vi/vim 中可以使用 :s 命令來替換字串 1、s/vivian/sky/ 替換當前行第一個 vivian 為 sky 2、:s/vivian/sky/g 替換當前行所有 vivian 為 sky

影象形態學:腐蝕膨脹操作操作

今天被問到影象形態學有啥作用,啥時候用腐蝕,啥時候用膨脹,啥時候用開閉操作呢? 1. 腐蝕是一種消除邊界點,使邊界向內部收縮的過程。 可以用來消除小且無意義的物體。 腐蝕的演算法: 用3x3的結構元素,掃描影象的每一個畫素 用結構元素與其覆蓋的二值影象做“與”操作 如果都為1,結果

MySQl的庫操作操作和資料操作

一、庫操作   1.1庫的增刪改查   (1)系統資料庫:      performance_schema:用來收集資料庫伺服器的效能引數,記錄處理查詢時發生的各種事件、鎖等現象   mysql:授權庫,主要儲存系統使用者的許可權資訊   test:MySQl資料庫系統自動建立的測試資料庫 &n

python selenium 瀏覽器標籤頁進行關閉和切換

1.關閉瀏覽器全部標籤頁 driver.quit() 2.關閉當前標籤頁(從標籤頁A開啟新的標籤頁B,關閉標籤頁A) driver.close() 3.關閉當前標籤頁(從標籤頁A開啟新的標籤頁B,關閉標籤頁B) 可利用瀏覽器自帶的快捷方式對開啟的標籤進行關閉 Firefox自身的快捷鍵分