知否知否—–selenium知多少
- 2019 年 10 月 6 日
- 筆記
關於selenium,就不多介紹什麼了,主要就是用來進行自動化的工具。怎樣進行自動化,這才是它大放異彩的地方。下面就來看看吧!

selenium定位
關於定位,一共有八種方法:
- find_element_by_id()
- find_element_by_name()
- find_element_by_class_name()
- find_element_by_tag_name()
- find_element_by_link_text()
- find_element_by_partial_link_text()
- find_element_by_xpath()
- find_element_by_css_selector()
用的比較多的是id,xpath
xpath的話不一定需要xpath基礎,主要是chrome瀏覽器可以在控制卡右鍵獲取,是不是很方便??
還有一些其他的:
下面是我們要定位的元素(從百度[www.baidu.com]拿過來的):
<input id="kw" class="s_ipt" name="wd"
value="" maxlength="255" autocomplete="off"
- 通過id定位:
dr.find_element_by_id("kw")
- 通過name定位:
dr.find_element_by_name("wd")
- 通過class name定位:
dr.find_element_by_class_name("s_ipt")
- 通過tag name定位:
dr.find_element_by_tag_name("input")
- 通過css定位:
dr.find_element_by_css_selector("#kw")
Selenium控制瀏覽器
首先,最基礎的,打開百度:
from selenium import webdriver driver = webdriver.Chrome() driver.get("http://www.baidu.com")
這個應該沒多大問題。
關於瀏覽器的一些設置這才是重點:
現在我需要:
設置瀏覽器寬400、高900顯示
driver.set_window_size(400, 900)
控制瀏覽器前進、後退:
我們打開了第二個網頁新聞
driver.get('http://news.baidu.com')
後退到一開始的百度:
driver.back()
再前進到新聞
driver.forward()
Selenium-Webdriver常用方法
用戶對於網頁的常用操作無非以下幾種:
點擊:
driver.find_element_by_id("kw").click()
在找到元素後觸發點擊事件
輸入:
driver.find_element_by_id("kw").send_keys("python大法好")
找到輸入框後,觸發輸入方法
(這裡有一點要說一下,為了證明你是一個合格的或者是比較細心的tester,這時候你就需要在輸入之前做一件事,這件事就是清空數據,防止輸入框裡面有快取數據,我們就需要清空:
driver.find_element_by_id("kw").clear()
)
還有就是表單提交:
driver.find_element_by_id("kw").send_keys("python大法好").submit()
submit方法
還有一些不常用的方法:
獲取元素的大小尺寸:
driver.find_element_by_id("kw").size
獲取元素的文本:
driver.find_element_by_id("kw").text
獲取屬性值:
driver.find_element_by_id("kw").get_attribute('type')
查看元素是否可見:
driver.find_element_by_id("kw").is_displayed()
Selenium滑鼠
關於滑鼠,我們之前有個click事件其實就說滑鼠的功能,現在我們看看還有哪些常用操作。
在selenium里,這些操作都封裝在ActionChains 類中。
可以通過下面這種方法直接導入ActionChains這個類:
from selenium.webdriver import ActionChains
- perform(): 執行所有 ActionChains 中存儲的行為;
- context_click(): 右擊;
driver.find_element_by_id("kw").context_click()
- double_click(): 雙擊;
driver.find_element_by_id("kw").double_click()
- drag_and_drop(): 拖動;
- move_to_element(): 滑鼠懸停。
滑鼠懸停的時候分為兩步,先定位到懸停的元素,再對定位到的元素執行滑鼠懸停操作。
above = driver.find_element_by_link_text("設置") ActionChains(driver).move_to_element(above).perform()
Selenium鍵盤事件
Keys()類提供了鍵盤上幾乎所有按鍵的方法。
我們之前說過send_keys()方法可以用來模擬鍵盤輸入。
刪除一個字元
如果說之前輸入了1233
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
執行了這一句之後輸入就變成123
輸入空格
driver.find_element_by_id("kw").send_keys(Keys.SPACE)
全選輸入框的內容 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')
複製 Ctrl + c
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'c')
回車鍵
driver.find_element_by_id("su").send_keys(Keys.ENTER)
Selenium斷言
做測試最重要的就是斷言,我們通常可以通過獲取title 、URL和text等資訊進行斷言。
在python裡面有個assert的關鍵字,這是我們做斷言的關鍵,在selenium裡面我們可以將測試的結果和預期的結果做比較,這樣就是一種斷言。
driver.title driver.find_element_by_class_name('nums').text
Selenium等待
等待分為兩種,一種是顯式等待,一種是隱式等待。
顯式等待是WebdDriver等待某個條件成立時繼續執行,否則在達到最大時長時拋出超時異常。
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None) driver :瀏覽器驅動。 timeout :最長超時時間,默認以秒為單位。 poll_frequency :檢測的間隔(步長)時間,默認為0.5S。 ignored_exceptions :超時後的異常資訊,默認情況下拋NoSuchElementException異常。 WebDriverWait()一般由until()或until_not()方法配合使用,下面是until()和until_not()方法的說明。 until(method, message=『』) 調用該方法提供的驅動程式作為一個參數,直到返回值為True。 until_not(method, message=『』) 調用該方法提供的驅動程式作為一個參數,直到返回值為False。
driver = webdriver.Chrome() driver.get("http://www.baidu.com") element = WebDriverWait(driver, 5, 0.5).until( EC.presence_of_element_located((By.ID, "kw"))) element.send_keys('python亂燉')
隱式等待
WebDriver提供了implicitly_wait()方法來實現隱式等待,默認設置為0。它的用法相對來說要簡單得多。
driver.implicitly_wait(1)
這就是一個簡單的隱式等待。
默認參數的單位為秒,本例中設置等待時長為1秒。首先這1秒並非一個固定的等待時間,它並不影響腳本的執行速度。其次,它並不針對頁面上的某一元素進行等待。當腳本執行到某個元素定位時,如果元素可以定位,則繼續執行;如果元素定位不到,則它將以輪詢的方式不斷地判斷元素是否被定位到。若直到超出設置時長(1秒)還沒有定位到元素,則拋出異常。
下期繼續。