測試技術:
python3+selenium+PO+unittest+HTMLTestRunner
PO模型介紹:
PO為什么會出現?
頁面對象模型,當頁面特別多的時候,我們的代碼更容易維護
PO是什么?
1、Page Object,是一種設計模式,用來管理和維護一組web元素的對象庫;
2、在PO模式下,應用程序的每一個頁面都有一個對應的page class;
3、每一個page class維護着頁面的元素集合和操作這些元素方法;
PO的優勢:
1、PO提供了一種業務流程與頁面元素分離的模式,這使得測試代碼變得更加清晰;
2、頁面對象與用例分離,能夠更好的復用對象;
3、可復用的頁面代碼會使代碼風格更加優化;
代碼結構:
find element封裝:
將element信息轉變為元組
def
selector_to_locator(
self
, key):
selector_by
=
self
.get_by_key(key)
selector_value
=
self
.get_value(key)
if
selector_by
=
=
'id'
:
locator
=
(By.
ID
, selector_value)
elif
selector_by
=
=
'name'
:
locator
=
(By.NAME,selector_value)
elif
selector_by
=
=
'class_name'
:
locator
=
(By.CLASS_NAME,selector_value)
elif
selector_by
=
=
'link_text'
:
locator
=
(By.PARTIAL_LINK_TEXT,selector_value)
elif
selector_by
=
=
'tag_name'
:
locator
=
(By.TAG_NAME, selector_value)
elif
selector_by
=
=
'xpath'
:
locator
=
(By.XPATH,selector_value)
elif
selector_by
=
=
'css_selector'
:
locator
=
(By.CSS_SELECTOR,selector_value)
else
:
raise
NameError(
"Please enter a valid selector of targeting elements."
)
return
locator
find element方法
def
find(
self
,key,value
=
''):
''' 定位到元素,返回元素對象,沒定位到,Timeout異常 loctor 傳元祖,如("id", "kw") '''
if
not
isinstance
(key,
tuple
):
locator
=
self
.selector_to_locator(key)
else
:
locator
=
key
if
isinstance
(locator,
tuple
):
if
value !
=
'':
ele
=
WebDriverWait(
self
.driver, setting.UI_WAIT_TIME).until(
ES.text_to_be_present_in_element_value(locator, value))
return
ele
else
:
ele
=
WebDriverWait(
self
.driver, setting.UI_WAIT_TIME).until(ES.presence_of_element_located(locator))
if
ele:
return
ele
else
:
print
(f
"定位失敗:定位方式->{locator[0]}, value值->{locator[1]}"
)
return
False
定位元素數據分離:


unittest介紹:
nittest中最核心的四個概念是:test fixture,test case, test suite, test runner 。
- unittest是Python自帶的單元測試框架,可以用其來作為自動化測試框架的用例組織執行框架。
- unittest的流程:寫好TestCase,然后由TestLoader加載TestCase到TestSuite,然后由TextTestRunner來運行TestSuite,運行的結果保存在TextTestResult中
- 一個class繼承unittest.TestCase即是一個TestCase,其中以
test
開頭的方法在load時被加載為一個真正的TestCase。 - 用
setUp()
、tearDown()
、setUpClass()
以及tearDownClass()
可以在用例執行前布置環境,以及在用例執行后清理環境 - 參數中加stream,可以將報告輸出到文件:可以用TextTestRunner輸出txt報告,以及可以用HTMLTestRunner輸出html報告
最終執行效果: