python, selenium 基礎

1.selenium定位方式,條件:必須是惟一的,若是不知道怎麼寫,能夠右鍵copy xpath ,這樣就會copy出一個 xpath形式的定位代碼css

find_element_by_id('kw')html

find_element_by_name()web

find_element_by_class_name()django

find_element_by_tag_name()框架

find_element_by_link_text()less

find_element_by_partial_link_text()函數

find_element_by_xpath()單元測試

find_element_by_css_selector()測試

2. 經過xpath定位方式:ui

find_element_by_xpath("//*[@id='kw' ") 或者find_element_by_xpath("//input[@id='kw' ")    #兩個//表示某一個標籤,*表示任意標籤名, 等同於 find_element_by_id('kw')

find_element_by_xpath("//input[@name='wd' ")     #兩個//表示某一個標籤,*表示任意標籤名, 等同於 find_element_by_name('wd')

find_element_by_xpath("//input[@class='s_ipt' ")

find_element_by_xpath("//a[text(), '新聞']")                      #等同於find_element_by_link_text('新聞'), partial_link_text:能夠用 find_element_by_xpath("//a[contains(@name, 'hao123')]")  

find_element_by_xpath("//input[@autocomplete='off' ")

find_element_by_xpath("//form/span[@class='aaa']/input[2]")

find_element_by_xpath("/html/body/div/div[2]/")

find_element_by_xpath("//form[@id='form' and name='f' and class='fm']/span[2]/input[2]")

3. css_selector定位方式:

find_element_by_css_selector("#kw")   # 等於id

find_element_by_css_selector("[name='wd']")

find_element_by_css_selector(".s_ipt")  # . 等於class

find_element_by_css_selector("span.s_ipt >input >")  # >表示層級關係

4. selenium定位的時候,如百度首頁的設置,這種是須要鼠標懸停的,能夠用 ActionChains 方法(from selenium.webdriver.common.action_chains import ActionChains), 下拉列表能夠用Select方法(from selenium.webdriver.support.select import Select), 當點保存後會有一個提示框(警告框等),能夠用Alert(from selenium.webdriver.common.alert import Alert), 語法以下:

setting=dr.find_element_by_link_text("設置")
ActionChains(dr).move_to_element(setting).perform()

selectitem=dr.find_element_by_id("nr")
Select(selectitem).select_by_value('20')

alert=dr.switch_to_alert()
print(alert.text)
alert.accept()

5. 若是定位的時候感受對可是怎麼也定位不到,須要研究一下是否是有嵌套表單,如https://mail.qq.com, 須要多表單的切換:

dr.switch_to_frame('login_frame')   # switch_to_frame('') 這裏能夠是id也能夠是name

若是點擊後彈出一個新的窗口,這時須要切換窗口,涉及到句柄handle:switch_to_window(),具體用法以下:

handle=dr.current_window_handle #獲取當前的窗口句柄

handles=dr.window_handles  #獲取全部的窗口句柄

for handle in handles:
    if handle!=handle1:
        dr.switch_to_window(handle)
        dr.find_element_by_id('nickname').send_keys("aaa")

   dr.close()  #關掉一個窗口

6. 幾個方法:set_window_size(400,600), getattribute(type), is_displayed()

7. 幾種等待方法:

顯式等待:from selenium.webdriver.support import expected_conditions as EC

element=WebDriverWait(driver, 5, 0.5).until (

EC.presence_of_element_located((By.ID, 'kw'))

)

隱式等待:只須要加一行:dr.implicitly_wait(5)在程序的開頭

8.單元測試框架(unittest, pytest), web開發框架(django, falsk)

9. 驗證碼怎麼破?

10. 怎麼樣讀取csv文件:

import csv
datas=csv.reader(open('./testData/user_info.csv', 'r'))
for data in datas:
if data[0]=='username':
continue
print(data[0])
print(data[1])

 11.怎麼樣讀取txt文件:

f=open('./testData/user_info.txt','r')
info=f.readlines()
f.close()
for i in range(0,2):
a=info[i].split(';')
username=a[0]
password=a[1]
b=Login(dr)
b.login126(username,password)

12. 怎麼樣讀取xml文件:

 

13.unittest 特色:

a. 建立的類必須繼續unittest.TestCase

b. 建立的方法必須以test開頭

c. 斷言方法爲self.assertEqual(result, 8)

d. 執行測試在if __name__=='__main__'裏用unittest.main()

e. setUp(self), tearDown(self)方法來執行每一條測試的開始要作的和最後要作的操做

f. 測試套件:suit=unittest.TestSuite()          suit.addTest(類名(‘方法名'))

g.測試運行器:runner=unittest.TextTestRunner()   runner.run(suit)

h.discover方法:能夠指定哪些文件來執行, suit=unittest.defaultTestLoader.discover("start_dir='xxx', pattern='test*.py')

i. 能夠用一些裝飾器,好比@unittest.skip("skip')    @unittest.skipIf(3>2, 'if true skip') @unittest.skipUnless(3>2, 'if true執行'), @unittest.unexpectedFailure

j. fixture 除了每條case的setUp, tearDown,還有類和module的setUpClass(cls), tearDownClass(cls),setUpModule(), tearDownModule() 方法前須要用@classmethon來裝飾

 14. pytest:

  • 測試文件以test_開頭(以_test結尾也能夠)pytest will run all files of the form test_*.py or *_test.py in the current directory and its subdirectories. More generally, it follows standard test discovery rules.
  • 測試類以Test開頭,而且不能帶有 __init__ 方法
  • 測試函數以test_開頭
  • 斷言使用基本的assert便可
  • 支持參數化, 以下能夠用pytest.mark.parametrize, 或者pytest.fixture

相關文章
相關標籤/搜索