標籤(空格分隔): seleniumpython
咱們進行selenium的時候,就是經過webdriver,對瀏覽器作一些操做的:
webdriver,除了find操做,以外還有哪些方法和屬性呢?web
- 1.獲取當前窗口的title:
driver.title
什麼是窗口的title呢?
例如打開百度:(關閉按鈕,左邊的「百度一下,你就知道」)就是title
- 問題:咱們獲取title有什麼做用呢?
答:
1.進行判斷,是否是本身要測試的網頁;
2.title也是測試的時候要測試的內容之一,也是一個檢查點,咱們經過driver.title來獲取他,就能夠進行判斷了;
3.title會隨着網頁的跳轉不斷的變化的,咱們在測試的時候,常常性作檢查;
問題:瀏覽器
from selenium import webdriver driver = webdriver.Chrome() driver.implicitly_wait(10) driver.get('http://www.baidu.com') print(driver.title) driver.find_element_by_id('kw').send_keys('淘寶') print(driver.title) driver.quit()
執行結果:
百度一下,你就知道
百度一下,你就知道測試
- 問題:
爲何一次性執行的時候,會兩次出現:百度一下,你就知道;結果是同樣的?
而單步調試的時候是好的呢?
答案:
由於咱們的程序執行比較快,執行完第一步以後,百度的淘寶,百度尚未獲取到淘寶網站的元素,因此就顯示了百度的原來的;網站
遇到上述問題怎麼解決呢?ui
import time from selenium import webdriver driver = webdriver.Chrome() driver.implicitly_wait(10) driver.get('http://www.baidu.com') print(driver.title) driver.find_element_by_id('kw').send_keys('淘寶') driver.sleep(2) print(driver.title) driver.quit()
這樣是否是達到效果了;url
- 可是問題來了?爲何有了隱士等待了,還要sleep呢?
敲黑板 :切記,切記!!!!!!
implicity_wait()只針對find的方法有效,對獲取界面title是沒有效果的;因此這個地方他不會等,他通常是根據每一個條件查找元素,切記,implicity_wait()對find方法有效;
- 問題又來了,上述的若是用sleep怎麼肯定等待多長時間呢?有沒有更好的方法?
搜索:淘寶,咱們人來講的話,是否是隻要有搜索的結果出來了,就表示確定搜索的結果出來了,因此咱們能夠吧寫死的sleep能夠變爲這種方式:
咱們能夠在代碼,加入一行代碼:
driver.find_element_by_id("")根據上的id 來定位;
從而替換掉寫死的sleep()
- 你們要明白這個工做的一個原理就行了;
- driver.current_url獲取當前窗口的地址欄:
這個你們指導就行了,用的不是特別的多;
- driver.get_screenshot_as_file('ss1.png')
截圖並保存成爲文件;
這種在什麼狀況下的會用到截圖呢?
答案:就是在出錯,也就是說出現bug的時候,由於自動化測試,人不一直看着的,若是把出錯的內容,給保存下來,這樣比較好容易定位;
- 通常自動化出問題,人仍是要復現並跟進一個下的,如上述的driver.get_screenshot_as_file('ss1.png') 這時候截圖保存在哪裏呢?
其實咱們是能夠指定保存截圖的路徑的;
想要查看咱們的截圖保存路徑,能夠查看pycharm的工做目錄,就會可保存在文件的工做目錄裏面;
- 一樣咱們也能夠對元素進行截圖:(對單個元素進行截圖)
好比說:
ele=driver.find_element_by_id('kw')
例如:以下的定位元素:
咱們能夠經過這個兩個來定位:若是上述的方式能夠定位,幫咱們節省一些時間,一般用於離本身很近的地方有ID的元素,實用這種方法;調試
實用上述截圖來定位元素,有什麼缺點呢?
Xpath:只要路徑裏面有個地方改動了,這樣就很差維護;
2.有的時候,經過右鍵複製的,是不行的,下次進來的時候,他ID是會變的,code
- 一般不可見元素都是能夠操做的 若是確實須要改變窗口的大小 size = driver.get_window_size() dirver.set_window_size(1100,size['height']) 滾動頁面: driver.execute_script('window.scrollBy(250,0)')