Selenium + python自動化測試

之前一直是用selenium進行web自動化測試的,把selenium + python寫用例的過程中需要注意的地方和問題點簡單的給大家分享一下

1、Selenium簡介

Selenium 是ThoughtWorks專門爲Web應用程序編寫的一個驗收測試工具。

Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE、Google Chrome、Mozilla Firefox、Mozilla Suite等。這個工具的主要功能包括:測試與瀏覽器的兼容性——測試你的應用程序看是否能夠很好得工作在不同瀏覽器和操作系統之上。測試系統功能——創建衰退測試檢驗軟件功能和用戶需求。支持自動錄製動作和自動生成。Python、Java、Ruby、Perl、Net等不同語言的測試腳本。

2、準備工作

搭建windows,準備工作如下:

1):下載python 2.7.13,下載地址:http://python.org/getdit/

安裝python 2.7.13,安裝目錄根據個人電腦目錄進行安裝,默認的是C盤,C:\python27

安裝完後配置環境變量,計算機--->系統屬性--->高級設置--->環境變量--->系統變量path

講安裝的路徑加入path中,前面有英文的分號(;)進行隔開。例如:;C:\python27;C:\python27\Scripts\

校驗是否成功安裝python,打開cmd窗口輸入:python,安裝成功顯示python的版本以及相關的信息。


2):下載selenium,下載地址:https://pypi.python.org/pypi/selenium/

如果是在聯網的狀態下,可以直接打開cmd窗口,執行下載命令安裝:pip install -U selenium

3):安裝chromedriver

下載chromedriver.exe 下載地址:http://chromedriver.storage.googleapis.com/index.html

解壓後,將chromedriver.exe放到chrome安裝的目錄裏:。。。\Google\Chrome\Application\,然後設置環境變量path,根據個人的chrome安裝路徑配置在path中,然後再調用運行:

#coding = utf-8

from selenium import webdriver

driver = webdriver.Chrome()

driver.get('http://test.guahao-inc.com:2000')

print driver.title

driver.quit()

3、開始第一個腳本

1):爲什麼選python

java也是可以實現的,這裏就不贅述了,對於python來說,簡單,易學,易用,應用也比較廣泛。

下面就以百度搜索實現第一個腳本

#coding = utf-8

from selenium import webdriver

browser = webdriver.Chrome()

browser.get('http://www.baidu.com')

browser.find_element_by_id("kw").send_keys("selenium")

browser.find_element_by_id("su").click()

browser.quit()

2):腳本解析

#coding = utf-8

可加也可以不加,加了一般可以防止出現亂碼

from selenium import webdriver

要想使用selenium的webdriver裏的函數,首先需要把包導進來

browser = webdriver.Chrome()

我們需要操控哪個瀏覽器呢?chrome,當然也可以換成IE,Firefox。

browser可以隨機取,但後面要用它操控各種函數執行。

browser.find_element_by_id("kw").send("selenium")

一個控件有若干個class、name、id、(也可以用其他方式定位),百度輸入框id是kw,我們要在輸入框裏輸入selenium。

browser.find_element_by_id("su").click()

搜索按鈕的id是su,我需要點擊一下按鈕(click())

browser.quit()

退出並關閉窗口的相關驅動程序。

4、Selenium—頁面元素定位

Name

cssSelector

id

linkText

name

partialLinkText

tagName

xpath

注意:

selenium-webdriver通過findElement()\findElements()等find方法調用"By"對象來定位和查詢元素。

By類只是提供查詢的方式進行分類。findElement返回一個元素對象否則拋出異常,findElements返回符合條 件的元素List,如果不存在符合條件的就返回一個空的list。

各方法使用優先級爲:id,name,linktext優先使用,cssselector次之,最後使用xpath。

5、添加等待時間

有時候爲了保證腳本運行的穩定性,需要在腳本中添加等待時間。

1):添加休眠時間

添加休眠時間非常簡單,我們需要引入time包,就可以在腳本中自由的添加時間了。

#coding = utf-8

from selenium import webdriver

import time  //調入時間函數

browser = webdriver.Chrome()

browser.get('http://www.baidu.com')

time.sleep(10)

browser.find_element_by_id("kw").send_keys("selenium")

browser.find_element_by_id("su").click()

time.sleep(3)

browser.quit()

當執行用例的時候,我們會發現這個等待時間就比較死板,頁面加載出來了,還在那裏等待着,只有時間到了才執行下面的語句,這樣就顯得不是特別智能,那麼接下來我們就看一下如何更智能的等待。

2):智能等待

通過添加implicitly_wait()方法就可以方便的實現智能等待;implicitly_wait(30)的用法應該比time.sleep()更智能,後者只能選擇固定的時間等待,前者可以在一個時間範圍內智能等待。

#coding = utf-8

from selenium import webdriver

import time  //調入時間函數

browser = webdriver.Chrome()

browser.get('http://www.baidu.com')

browser.implicitly_wait(30) //智能等待30秒

browser.find_element_by_id("kw").send_keys("selenium")

browser.find_element_by_id("su").click()

browser.quit()

3):瀏覽器最大化

每次執行腳本的時候,我們會看到瀏覽器並不是最大化的狀態,儘管這樣不會影響測試,但是有時候會影響我們的’觀看‘腳本運行。

#coding = utf-8

from selenium import webdriver

import time  //調入時間函數

browser = webdriver.Chrome()

browser.get('http://www.baidu.com')

browser.implicitly_wait(30) //智能等待30秒

print “瀏覽器最大化”

browser.maximize_window() //將瀏覽器最大化顯示

browser.find_element_by_id("kw").send_keys("selenium")

browser.find_element_by_id("su").click()

browser.quit()

6、操作測試對象

一般來說,webdriver中比較常用的操作對象的方法有下面幾個:

click  點擊對象

send_key  在對象上模擬按鍵輸入

clear  清除對象內容

submit  提交表單

text   用於獲取元素的文本信息

7、鍵盤事件

1):鍵盤按鍵用法

這裏以我們測試環境的portal應用,以用戶登錄的場景來模擬鍵盤按鍵的方式進行操作:

#coding = utf-8

from selenium import webdriver

from selenium import webdriver.common.keys import keys #需要引入keys包

import os,time

browser = webdriver.Chrome()

browser.get('http://test.guahao-inc.com:2000/user/login?target=%2F')

browser.implicitly_wait(30) //智能等待30秒

print “瀏覽器最大化”

browser.maximize_window() //將瀏覽器最大化顯示

browser.find_element_by_id("loginId").clear() //清空輸入框裏的內容

browser.find_element_by_id("loginId").send_keys("15268170102")

#tab的定位相當於清除了密碼框內的默認提示信息,等同上面的clear()

browser.find_element_by_id("password").send_keys(Keys.TAB)

time.sleep(0.5)

browser.find_element_by_id("password").send_keys("123456")

browser.find_element_by_id("validCode").send_keys(Keys.TAB)

time.sleep(0.5)

browser.find_element_by_id("validCode").send_keys("ajhk")

#通過定位驗證碼的框,enter(回車)來代替登陸按鈕

browser.find_element_by_id("validCode").send_keys(Keys.ENTER)

#也可以通過定位登陸按鈕,enter(回車)來代替click()

#browser.find_element_by_id("J_LoginSubmit").send_keys(Keys.ENTER)

browser.quit()

要想調用鍵盤按鍵操作需要引入keys包

from selenium import webdriver.common.keys import keys

通過send_keys調用按鍵:

send_keys(Keys.TAB)  #TAB

send_keys(Keys.ENTER)  #回車

注意:這個操作和頁面元素的遍歷有關,假如當前定位在賬號輸入框,按鍵盤的tab鍵後遍歷的不是密碼框,那就無法輸入密碼。

2):鍵盤組合鍵用法

#coding = utf-8

from selenium import webdriver

import time  //調入時間函數

browser = webdriver.Chrome()

browser.get('http://www.baidu.com')

browser.implicitly_wait(30) //智能等待30秒

print “瀏覽器最大化”

browser.maximize_window() //將瀏覽器最大化顯示

browser.find_element_by_id("kw").send_keys("selenium")

#ctrl + a 全選輸入框內容

browser.find_element_by_id("kw").send_keys("Keys.CONTROL,'a'")

#ctrl + x 剪貼輸入框內容

browser.find_element_by_id("kw").send_keys("Keys.CONTROL,'x'")

#輸入框重新輸入內容,搜索

browser.find_element_by_id("kw").send_keys(u"微醫")

browser.find_element_by_id("su").click()

browser.quit()

3):中午亂碼問題

selenium2 python在send_keys()中輸入中文一直報錯,其實在前面加個小u就解決了,coding=utf-8   send_keys(u"輸入中文")

注:utf-8有時候並不是萬能的,我們需要保持腳本、瀏覽器、程序三者編碼之間的轉換,如果utf-8不能解決問題,可以嘗試GBK或者修改瀏覽器的默認編碼。


這裏給大家簡單的介紹一下selenium + python的使用方法,如果對selenium感興趣的朋友,可以相互溝通學習。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章