標簽(空格分隔): selenium
我們進行selenium的時候,就是通過webdriver,對瀏覽器做一些操作的:
webdriver,除了find操作,之外還有哪些方法和屬性呢?
- 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()
執行結果:
百度一下,你就知道
百度一下,你就知道
- 問題:
為什么一次性執行的時候,會兩次出現:百度一下,你就知道;結果是一樣的?
而單步調試的時候是好的呢?
答案:
因為我們的程序執行比較快,執行完第一步之后,百度的淘寶,百度還沒有獲取到淘寶網站的元素,所以就顯示了百度的原來的;
遇到上述問題怎么解決呢?
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()
這樣是不是達到效果了;
- 但是問題來了?為什么有了隱士等待了,還要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')
實用技巧2:
例如:如下的定位元素:
我們可以通過這個兩個來定位:如果上述的方式可以定位,幫我們節省一些時間,通常用於離自己很近的地方有ID的元素,實用這種方法;
實用上述截圖來定位元素,有什么缺點呢?
Xpath:只要路徑里面有個地方改動了,這樣就不好維護;
2.有的時候,通過右鍵復制的,是不行的,下次進來的時候,他ID是會變的,
常見的:
- 通常不可見元素都是可以操作的
如果確實需要改變窗口的大小
size = driver.get_window_size()
dirver.set_window_size(1100,size['height'])
滾動頁面:
driver.execute_script('window.scrollBy(250,0)')