『壹』 selenium之webdriver詳解——小白進階之路(二)
筆記:
01.設置元素等待時間
自動化測試的時候,元素定位沒有錯,但是跑腳本的時候卻報錯了
例如,登錄的時候要等登錄頁面載入出來才能輸入用戶名和密碼
selenium設置元素等待時間的3種方式及區別
1.sleep() --固定等待時間:強制等待,不能把握准確的等等時間,適合調試時用
2.implicitly_wait() --隱式等待時間:等頁面載入完成才執行下一步操作,一般設置一次即可
3.WebDriverWait --顯示等待時間:配合untill()和not untill()方法,根據判斷條件 靈活處理等待時間
要先設置一個超長時間,在這個時間內,程序根據調用頻率每隔幾秒查看一下,如果條件滿足,則執行下一步操作,若不滿足且超過了等待時間則拋出異常
導包:from selenium.webdriver.support.ui import WebDriverWait
使用:WebDriverWait(driver, 超時時間, 調用頻率, 要忽略的異常).until(要執行的方法, 超時時返回的錯誤信息)
實例:
replace:
02.鍵盤事件Keys類
製表符:send_keys(Keys.TAB)
退出鍵:send_keys(Keys.ESCAPE)
F1:send_keys(Keys.F1) f1~f12 以此類推
03.二次定位
顧名思義,通過多個元素,定位兩次
dr.find_element(By.CLASS_NAME,"s_input").send_keys("python")
二次定位:
dr.find_element(By.NAME,"query").find_element(By.CLASS_NAME,"s_input").send_keys("python")
04.selenium滑鼠懸停類-- ActionChains()
導包:from selenium.webdriver.common.action_chainsimport ActionChains
實例:將滑鼠移動至更多設置,懸停滑鼠
elem1= dr.find_element(By.LINK_TEXT,"設置")
ActionChains(dr).move_to_element(elem1).perform()
05.selenium警告框的處理
很多web應用經常會遇到javaScript編寫的alert 、confirm 以及prompt 彈窗,需要用到switch_to.alert來切換彈窗,並對彈窗進行輸入信息,關閉等處理。
switch_to.alert.text --獲取彈窗文本信息
switch_to.alert.accept() --點擊彈窗中確定按鈕
switch_to.alert.dismiss() --點擊彈出中取消按鈕
switch_to.alert.sendKeys("字元串") --在彈窗中輸入信息
實例:
06.下拉菜單選擇的三種方式
導包:from selenium.webdriver.support.uiimport Select
#選擇下拉框的o2
elem1 = dr.find_element(By.ID,"s3Id")
1:根據value值定位
Select(elem1).select_by_value("o2val")
2.根據index定位
Select(elem1).select_by_index(1)
3.根據下拉框文本信息定位
Select(elem1).select_by_visible_text("o2")
07.多窗口切換
window_handles --獲取所有窗口句柄
switch_to.window(指定窗口) --切換到指定窗口
08.selenium之js操作瀏覽器滾動條位置
execute_script("window.scrollTo(0,n);")
09.selenium之JS操作隱藏元素
隱藏元素的標識:style="display:none;"
一般我們通過將隱藏元素的屬性修改成顯示再定位
10.操作excel文件
將測試數據參數化用到
10.1准備參數化數據文件
10.2導包
打開文件,填寫文檔路徑
運行結果:
定位到sheet的位置
讀取sheet的行和列的內容
#讀取表的行的方法
rows = sheet1.nrows
print("行數",rows)
columns = sheet1.ncols
print("列數",columns)
讀取指定行的值
#讀取指定行的值
rowValue1 = sheet1.row_values(0)
print(rowValue1)
#讀取指定列的值
colValue1 = sheet1.col_values(0)
print(colValue1)
#輸出所有用戶名和對應的密碼
for iin range(1,rows):
print("用戶名:" + sheet1.row_values(i)[0] +",密碼:" + sheet1.row_values(i)[1])
『貳』 如何搭建Python3.4+Selenium
詳細步驟:1.下載32位的python3.4,安裝,注意在安裝過程中,選擇pip2.添加系統環境變數C:\Python34;C:\Python34\Scripts;C:\ProgramFiles\Google\Chrome\Application(後面會用到)3.使用pip命令,安裝seleniumcdPython34然後輸入:pipinstall-Uselenium安裝成功後,顯示:Runingsetup.-2.48.04.檢測selenium是否安裝成功。在Python的IDLE中,輸入:fromseleniumimportwebdriver如果沒有報錯,則selenium安裝成功。5.開始第一個程序=webdriver.Chrome()driver.get(「http://www..com「)driver.find_element_by_id(「kw」).send_keys(「自動化測試」)按F5運行,然後會自動打開網路網頁。能夠順利安裝,那是幸運的,但是時候,總因為各種原因導致安裝過程不太順利。下面將安裝過程中遇到的問題,總結在此:issue1:使用pip命令安裝結束後,載入selenium模塊報錯。fromseleniumimportwebdriver報錯:File「pyshell#0」,line1,inimportseleniumFile「C:\Python34\selenium.py」,line1,:cannotimportname『webdriver』Traceback(mostrecentcalllast):File「pyshell#0」,line1,inimportseleniumFile「C:\Python34\selenium.py」,line1,infromseleniumimportwebdriver網路了很多方法,仍無解。解決方法:最後換了版本,將64位python3.4改為32位的python3.4再次重新安裝,成功。issue2:使用browser=webdriver.Chorme()報錯。報錯:Errormessage:「』chromedriver』」這是因為缺少驅動:Chromedriver.exe下載Chormedriver.exe注意安裝Chromedriver.exe要與PC所安裝的Chrome版本匹配。解決方法:下載安裝ChromeDrvier.exe將ChromeDrvier.exe放到C:\Python34\Scripts\OVER
『叄』 selenium超全教程(4)-持續更新中
單選比較好操作,先定位需要單選的某個元素,然後點擊一下即可。
多選好像也比較容易,依次定位需要選擇的元素,點擊即可。
下拉框的操作相對復雜一些,需要用到Select模塊。
先導入該類
在select模塊中有以下定位方法
測試頁面
然後,再演示下拉框的不同選擇的方式
Selenium打開一個頁面之後,默認是在父頁面進行操作,此時如果這個頁面還有子頁面,想要獲取子頁面的節點元素信息則需要切換到子頁面進行擦走,這時候switch_to.frame()就來了。如果想回到父頁面,用switch_to.parent_frame()即可。
既然是模擬瀏覽器操作,自然也就需要能模擬滑鼠的一些操作了,這里需要導入ActionChains 類。
左鍵
這個其實就是頁面交互操作中的點擊click()操作。
右鍵
context_click()
在上述操作中
雙擊
double_click()
drag_and_drop(source,target)拖拽操作嘛,開始位置和結束位置需要被指定,這個常用於滑塊類驗證碼的操作之類。
selenium中的Keys()類提供了大部分的鍵盤操作方法,通過send_keys()方法來模擬鍵盤上的按鍵。
引入Keys類
常見的鍵盤操作
send_keys(Keys.BACK_SPACE):刪除鍵(BackSpace)
send_keys(Keys.SPACE):空格鍵(Space)
send_keys(Keys.TAB):製表鍵(TAB)
send_keys(Keys.ESCAPE):回退鍵(ESCAPE)
send_keys(Keys.ENTER):回車鍵(ENTER)
send_keys(Keys.CONTRL,'a'):全選(Ctrl+A)
send_keys(Keys.CONTRL,'c'):復制(Ctrl+C)
send_keys(Keys.CONTRL,'x'):剪切(Ctrl+X)
send_keys(Keys.CONTRL,'v'):粘貼(Ctrl+V)
send_keys(Keys.F1):鍵盤F1
send_keys(Keys.F12):鍵盤F12
實例操作演示:
定位需要操作的元素,然後操作即可!
如果遇到使用ajax載入的網頁,頁面元素可能不是同時載入出來的,這個時候嘗試在get方法執行完成時獲取網頁源代碼可能並非瀏覽器完全載入完成的頁面。所以,這種情況下需要設置延時等待一定時間,確保全部節點都載入出來。
等待有三種方式:強制等待、隱式等待和顯式等待
1.強制等待
直接time.sleep(n)強制等待n秒,在執行get方法之後執行。
2.隱式等待
implicitly_wait()設置等待時間,如果到時間有元素節點沒有載入出來,就會拋出異常。
3. 顯式等待
設置一個等待時間和一個條件,在規定時間內,每隔一段時間查看下條件是否成立,如果成立那麼程序就繼續執行,否則就拋出一個超時異常。
WebDriverWait的參數說明:
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
driver: 瀏覽器驅動
timeout: 超時時間,等待的最長時間(同時要考慮隱性等待時間)
poll_frequency: 每次檢測的間隔時間,默認是0.5秒
ignored_exceptions:超時後的異常信息,默認情況下拋出NoSuchElementException異常
until(method,message='')
method: 在等待期間,每隔一段時間調用這個傳入的方法,直到返回值不是False
message: 如果超時,拋出TimeoutException,將message傳入異常
until_not(method,message='')
until_not 與until相反,until是當某元素出現或什麼條件成立則繼續執行,until_not是當某元素消失或什麼條件不成立則繼續執行,參數也相同。
其他等待條件
還有一些操作,比如下拉進度條,模擬javaScript,使用execute_script方法來實現。
在selenium使用過程中,還可以很方便對Cookie進行獲取、添加與刪除等操作。
輸出:
『肆』 怎樣開始寫第一個基於python的selenium腳本
1、下載並安裝python
2、安裝selenium下載並解壓縮selenium-2.32.0.tar.gz. 把selenium-2.32.0\py\下的selenium整個文件夾放入Python33\Lib\site-packages目錄下。
3 下載Eclipse後安裝pydev插件
4 打開eclipse創建pydev project,並添加一個Pydev Mole 輸入一下代碼
# coding=gbk
from selenium import webdriver
from selenium.webdriver.common import by
if __name__ == '__main__':
firefoxDriver=webdriver.Firefox()
firefoxDriver.get("http://www..com")
ele=firefoxDriver.find_element(by.By.ID,"kw")
ele.send_keys("hello")
5要想支持IE,下載IEDriverServer,解壓縮之後,將exe程序放在安裝python的根目錄下。
6、運行過程中如果出現WebDriverException: Message: u'Unexpected error launching
Internet Explorer. Protected Mode settings are not the same for all
zones. Enable Protected Mode must be set to the same value (enabled or
disabled) for all zones.'
這個錯誤,更改IE的internet選項->安全,將Internet/本地Internet/受信任的站定/受限制的站點中的啟用保護模式全部
去掉勾,或者全部勾上。下面是一個IE的例子,打開網路,自動搜索selenium。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Ie()
driver.get("xxx")
elem = driver.find_element_by_name("wd")
elem.send_keys("selenium")
elem.send_keys(Keys.RETURN)
完成上述步驟,你已經寫了第一個基於python的selenium 腳本了
『伍』 Selenium webdriver常用屬性和方法
屬性 屬性描述
driver.name 瀏覽器名稱
driver.current_url 當前url
driver.title 當前頁面標題
driver.page_source 當前頁面源碼
driver.current_window_handle 窗口句柄
driver.window_handles 當前窗口所有句柄
方法 方法描述
driver.back() 瀏覽器後退
driver.forward() 瀏覽器前進
driver.refresh() 瀏覽器刷新
driver.close() 關閉當前窗口
driver.quit() 退出瀏覽器
driver.switch_to.frame() 切換到frame
driver.switch_to.alert() 切換到alert
driver.switch_to.active_element() 切換到活動元素
源碼:
from seleniumimport webdriver
from timeimport sleep
class Testcase(object):
def __init__(self):
self.driver = webdriver.Chrome()
self.driver.get('http://www..com')
self.driver.maximize_window()
def test_prop(self):
print(self.driver.name)#瀏覽器名稱
print(self.driver.current_url)#url
print(self.driver.title)#網頁的title
print(self.driver.window_handles)#句柄
print(self.driver.page_source)#查看源碼
self.driver.quit()
def test_method(self):
self.driver.find_element_by_id('kw').send_keys('selenium')
self.driver.find_element_by_id('su').click()
sleep(2)
self.driver.back()#後退
sleep(2)
self.driver.refresh()#刷新
sleep(2)
self.driver.forward()#前進
self.driver.close()#只關閉當前tab
self.driver.quit()#關閉瀏覽器
def test_windows(self):
self.driver.find_element_by_link_text('新聞').click()
windows =self.driver.window_handles
while 1:
for win windows:
self.driver.switch_to.window(w)
sleep(2)
if __name__ =='__main__':
case = Testcase()
#case.test_prop()
#case.test_method()
case.test_windows()
『陸』 java怎麼安裝selenium
第1步:找到selenium 下載部分http://www.seleniumhq.org/download/,並通過點擊它的版本號,如下圖所示下載Selenium伺服器。
第2步:下載後,我們需要啟動Selenium伺服器。這樣做,打開命令提示符並導航到下載的JAR文件保持如下所示的文件夾。
第3步:啟動伺服器,使用命令「'java -jar <<downloaded jar name >>"如果已安裝Java JDK正常,會得到一個成功的消息,如下圖所示。現在,我們就可以開始寫這將涉及在下一章Selenium RC的腳本。
配置Selenium的webdriver
現在,就讓我們來看看如何配置Selenium webdriver。我們將了解如何開發在即將到來的章節,Selenium webdriver的劇本,但是現在我們明白它只是配置的一部分。
第1步:找到selenium 下載部分http://www.seleniumhq.org/download/和下載selenium 的webdriver通過點擊它的版本號,如下圖所示。
第2步:下載的文件是壓縮格式,一個具有解壓縮的內容映射到項目文件夾中。
步驟3:如下圖所示,將解壓縮後的內容將被顯示。如何將其映射到項目文件夾,如何啟動腳本會處理在webdriver的章節。
『柒』 如何在ubuntu中安裝selenium2
Selenium是一個web自動化測試框架。用它可以實現web應用自動化測試。不過,我不只是用它來做測試,我還用它從電子商務網站簽到頁面爬取javascript生成的或AJAX的內容。
作為程序員,我不滿足於使用Selenium
IDE來記錄和重放宏記錄。那樣很蹩腳,而且不適合部署到多台伺服器。這時,你需要Selenium
WebDriver,它又靈活,而且通過Selenium headless,運行Selenium在伺服器上不需要顯示設備。
為什麼要運行Headless Selenium 測試?
當你希望能在伺服器上運行的健壯的自動化操作,而其操作又依賴於
27X7,同時還希望它是穩定的,這時,Selenium是你唯一的選擇。但是,Selenium需要運行在瀏覽器上。所以,你得騙Selenium,讓
它覺得,它正跑在一台帶有顯示器的機器上。這樣,你就可以不間斷的跑自動化測試,同時又不失穩定性和擴展性。
如何在ubuntu上運行Selenium headless
本教程的目標是在使用Mozilla Firefox作為主瀏覽器的ubuntu上配置和運行selenium headless。
安裝Firefox headless
確認你的ubuntu安裝的是最新版本的Firefox。我遇到過Selenium的版本和Firefox的版本不兼容問題。如果你沒有安裝Firefox或者使用的是老版本的Firefox,可按以下步驟升級Firefox:
在/etc/apt/sources.list加入:
ppa:mozillateam/firefox-stable
運行以下命令升級或安裝Firefox
sudo apt-get update
sudo apt-get install firefox
運行成功後,ubuntu上就應該安裝好最新版本的Firefox了。
安裝Xvfb——一個X虛擬框架
這個模擬框架使用虛擬內存能讓X-Server運行在沒有顯示設備的機器上。這樣,瀏覽器就可以運行了。在ubuntu和Debian上安裝xvfb,只要運行:
sudo apt-get install xvfb
現在,可以運行xvfb服務上一個帶有數字的顯示設備上,這樣是為了防止你在下階段添加設備時引發沖突。本教程,我們分配一個顯示設備 10..
sudo Xvfb :10 -ac
-ac代表關閉xvfb的訪問控制。好了,伺服器可以運行了。
啟動瀏覽器
在你運行瀏覽器前,你首先要設置DISPLAY環境變數,以指定xvfb運行在哪個顯示設備上。在加入環境變數前,我們檢查一下所有的這些都如我們所料:
export DISPLAY=:10
firefox
如果終端(terminal)沒有顯示錯誤,就說明你已經成功運行Firefox在無顯示設備的ubuntu上了。它會一直運行,直到你使用ctrl + C或其它類似方法來終止其運行。同時,它不會有任何輸出。
如果你能成功運行以上的步驟,那麼接下來的部分就是輕而易舉了。現在,我們可以在ubuntu伺服器上運行selenium,如同你在本地運行
一樣。本教程的下一部分,我展示了如何運行一個獨立selenium伺服器,同時使用PHP的selenium webdriver去連接。
小結
很久以前,我也使用selenium做自動化的集成測試,使用HtmlUnit的webdriver,所以不需要顯示器。但是HtmlUnit
的表現總是有些不如意。而最近在項目中發現這篇文章,解決我長久以來的問題:在沒有顯示器的伺服器上運行Firefox的集成測試。
『捌』 selenium webdriver 怎麼抓頁面的js error
selenium webdriver的硬傷在於它無法真正判斷頁面上的元素什麼時候能生成完畢,換句話說 ,假如獲取頁面上的元素失敗,而這個元素是由js,ajax生成並且是未知的情況下(例如:要抓取網頁關鍵詞,但是關鍵詞的內容是什麼,一共有幾個都是未知的情況下) 你無法判斷是元素尚未被生成還是頁面原本就沒有這個元素導致的獲取失敗。
剛才說webdriver無法真正判斷頁面元素生成完畢,但webdriver提供了判斷頁面是否載入完成的方法,只不過這個載入完成的含義是頁面上的html和JS代碼載入完成,但js,ajax還可能在html和JS載入完之後執行從而改變頁面上的內容,所以像剛才舉例的網頁上的關鍵詞抓取失敗就很難判斷是js,ajax沒有運行完畢還是頁面上原本就沒有這個元素導致的。
雖然selenium webdriver沒有提供判斷頁面上的js,ajax是否執行完畢的功能,但不等於完全沒有辦法判斷。官方也承認並不是不可以而是非常困難。昨天群里一位高手也說這種情況需要自行查看頁面上的動態腳本代碼以得知判斷頁面執行完的條件。我相信一個第三方庫是比較難做到這一點的,即使牛逼到能實現,也不排除頁面上有一個持續或者定時與伺服器通信的動態腳本在實時改變頁面內容,這樣一來頁面永遠沒有生成完畢的那一刻。
對於剛才說的抓取頁面上未知元素,目前普遍的做法是在程序裡面顯示指定等待一段時間,確保有足夠的時間讓它生成,當然,不排除網路太差直到等待超時也來不及生成的情況。如果元素已知,可以顯示用selenium webdriver提供的方法顯示等待某一個元素在頁面上出現後再繼續執行下面的代碼。