python+selenium web自動化測試

selenium安裝

python環境安裝

python編輯器pycharm安裝

cmd全局安裝selenium:pip install selenium

pycharm中項目在中在虛擬環境中:pip install selenium(需要在pycharm的Terminal中輸入)

下載瀏覽器驅動:在help》About Google Chrome可以查看瀏覽器版本,根據版本安裝前三位選擇驅動版本

python+selenium獲取瀏覽器元素

類別 查找方式 例子
基本方法 根據id element = wd.find_element_by_id('kw')
根據class element2 = wd.find_elements_by_class_name('box')
根據標籤名 element4 = wd.find_elements_by_tag_name('img')
css選擇器 根據class element7 = wd.find_element_by_css_selector('.class_box')
根據id element8 = wd.find_element_by_css_selector('#class_box')
直接子元素> element9 = wd.find_element_by_css_selector('.class_box2>.plant')
所有子元素用空格 elementA = wd.find_element_by_css_selector('.class_box2 .plant')

根據屬性[ ]

elementB = wd.find_element_by_css_selector('[src="1.jpg"]')

[href="xxx"]

div[class="box"]  //class爲box的div

或者, elementC = wd.find_element_by_css_selector('.classbox,.classbox2')
兄弟節點+

緊跟着h3的span

elementF = wd.find_elements_by_css_selector('h3 + span')

第n個元素

//class名爲plant2且是他的父元素的第n個元素

elementC = wd.find_elements_by_css_selector('.plant2:nth-child(2)')
for ele in elementC:
    print(ele.text)

//plant下的第1個元素

elementD = wd.find_elements_by_css_selector('.plant > :nth-child(1) ')
for ele in elementD:
    print(ele.text)

倒數第n個

nth-last-child

倒數第一個p標籤

elementE = wd.find_elements_by_css_selector('p:nth-last-child(1) ')

父元素的第n個某種類型

nth-of-type(1)

第一個p類型

elementE = wd.find_elements_by_css_selector('p :nth-of-type(1) ')

奇數節點

:nth-child(odd)

plant下的奇數節點

elementF = wd.find_elements_by_css_selector('.plant :nth-child(odd)')

偶數節點

:nth-child(even)

event下偶數節點

elementF = wd.find_elements_by_css_selector('.plant :nth-child(even)')

#pbox p:nth-of-type(even)

Xpath

絕對路徑

/html/body/div

elementJ = wd.find_element_by_xpath("html/body/div")

不管路徑

所有div

wd.find_element_by_xpath(//div)

div下所有p(包括孫節點)

wd.find_element_by_xpath(//div//p)

直接子節點

div下子節點p

wd.find_element_by_xpath(//div/p)

所有子節點 wd.find_element_by_xpath(//div*)
根據屬性

wd.find_element_by_xpath(//*[@id="west"])

wd.find_element_by_xpath(//div[@class="west"])

包含用contains()

wd.find_element_by_xpath(//*[contains(@href,"baidu")])

以什麼開頭^

wd.find_element_by_xpath(//*[starts-with(@href,"https")])

以什麼結尾$

wd.find_element_by_xpath(//*[ends-with(@href,"https")])

根據次序

p類型的第二個

wd.find_element_by_xpath(//p[2])

div中p類型的第二個

wd.find_element_by_xpath(//div/p[2])

第二個元素*

wd.find_element_by_xpath(//div/*[2])

倒數第二個p類型

wd.find_element_by_xpath(//p[last()-1])

根據範圍

p類型的第1-2個

<div>

  <p></p>

  <p></p>

</div>

<div>

  <p></p>

  <p></p>

</div>

wd.find_element_by_xpath(//p[position()<=2])

p類型的倒數第1-2個

 

     
     
     
     
     
     

 

操作元素 內容 例子
獲取title   print(wd.title)
輸入   element.send_keys('123')
點擊   element5=wd.find_element_by_tag_name('button').click()
獲取屬性 獲取內容

print(element6.get_attribute('innerText'))

print(element6.get_attribute('textContent'))

print(element3.text)

   
獲取class print(element6.get_attribute('class'))
frame切換 切換到子iframe

切換到id/name爲frame1的frame

wd.switch_to_frame('frame1')

切換回外層html wd.switch_to.default_content()
窗口切換

切換到窗口

wd.switch_to.window(handle)

for handle in wd.window_handles:

    wd.switch_to.window(handle) //跳到

    if 'baidu' in wd.title

        break

  回到之前的窗口

在切換窗口之前保存窗口handle

mainWindow = wd.current_window_handle

跳轉到制定handle的窗口

wd.switch_to.window(mainWindow)

表單操作 radio單選框

//獲取已經被選的值

print(wd.find_element_by_css_selector('#s_radio input[checked=checked]').get_attribute('value'))

//獲取要選的項並點擊

elementG = wd.find_element_by_css_selector('#s_radio input[value="張三"]')
elementG.click()

checkbox複選框

獲取已經被選的項並點擊

elementH = wd.find_elements_by_css_selector('#s_checkbox input[checked=checked]')
for item2 in elementH:
    item2.click()

elementI = wd.find_element_by_css_selector('#s_checkbox input[value="蘋果"]')
elementI.click()

select下拉列表

//導入Select類

from selenium.webdriver.suppport.ui improit Select

//創建select對象

select = Select(wd.find_element_by_id("ss_single"))

//根據分類選擇

select.select_by_visible_text("廣州")

select.select_by_index("2")

select.select_by_value("beijing")

//取消選擇

select.deselect_by_visible_text("廣州")

select.deselect_by_index("2")

select.deselect_by_value("beijing")

//清除所有選項

select.deselect_all()

鼠標操作 ActionChains

//鼠標移動

ac.move_to_element(wd.find_element_by_id("bjn")).perform()

凍結界面 debugger 在console中輸入setTimeOut(function(){debugger},5000)
alert彈出框 單選

wd.find_element_by_id('btn1').click()

//打印彈出框文本
print(wd.switch_to.alert.text)

//點擊確定
wd.switch_to.alert.accept()

多選

wd.find_element_by_id('btn2').click()
print(wd.switch_to.alert.text)

//點擊確定
wd.switch_to.alert.accept()

//點擊取消
wd.switch_to.alert.dismiss()

多選+輸入框

wd.find_element_by_id('btn3').click()
alert1 = wd.switch_to.alert
print(wd.switch_to.alert.text)

//輸入內容
alert1.send_keys("jenniferZ")

//點擊確定
wd.switch_to.alert.accept()

//點擊取消
wd.switch_to.alert.dismiss()

//導入selenium和webdriver
from selenium import webdriver

//指定瀏覽器
wd = webdriver.Chrome()

//在未找到元素時,每半秒執行一次 只等待10秒
wd.implicitly_wait(10)

//設置瀏覽器訪問地址
wd.get('file:///D:/testing/1.html')

//根據id查找元素
element=wd.find_element_by_id('kw')

element.send_keys('123')

element2 = wd.find_elements_by_class_name('box')

for item in element2:
    print(item.text)

element3 = wd.find_element_by_class_name('box')
print(element3.text)

element4 = wd.find_elements_by_tag_name('img')
element5 = wd.find_element_by_tag_name('button').click()

element6 = wd.find_element_by_id('apple')
print(element6.get_attribute('innerText'))
print(element6.get_attribute('textContent'))

element7 = wd.find_element_by_css_selector('.class_box')
print(element7.get_attribute('innerText'))

element8 = wd.find_element_by_css_selector('#class_box')
print(element8.text)
element9 = wd.find_element_by_css_selector('.class_box2>.plant')
print(element9.text)
elementA = wd.find_element_by_css_selector('.class_box2 .plant')
print(elementA.text)

elementB = wd.find_element_by_css_selector('[src="1.jpg"]')
print(elementB.get_attribute('class'))

elementC = wd.find_elements_by_css_selector('.plant2:nth-child(2)')
for ele in elementC:
    print(ele.text)

elementD = wd.find_elements_by_css_selector('.plant > :nth-child(1) ')
for ele in elementD:
    print(ele.text)

//點擊
elementF = wd.find_element_by_id('linkTo').click()

//保存window句柄
mainWindow = wd.current_window_handle

//遍歷所有窗口,逐個跳轉直到找到title裏包含‘百度’的窗口
for handle in wd.window_handles:

    wd.switch_to.window(handle)

    if '百度' in wd.title:

       break

print(wd.title)

baiText = wd.find_element_by_id('kw')

baiText.send_keys('222')

//回到句柄爲mainWindow的窗口
wd.switch_to.window(mainWindow)

print(wd.find_element_by_css_selector('#s_radio input[checked=checked]').get_attribute('value'))

elementG = wd.find_element_by_css_selector('#s_radio input[value="張三"]')
elementG.click()

elementH = wd.find_elements_by_css_selector('#s_checkbox input[checked=checked]')
for item2 in elementH:
    item2.click()

elementI = wd.find_element_by_css_selector('#s_checkbox input[value="蘋果"]')
elementI.click()

elementJ = wd.find_element_by_xpath("html/body/div")

pass

表單

from selenium import webdriver
//導入select類
from selenium.webdriver.support.select import Select

wd = webdriver.Chrome()
wd.implicitly_wait(10)
wd.get('file:///D:/testing/1.html')

//創建select對象實例
select = Select(wd.find_element_by_id("city"))
//按文本選擇
select.select_by_visible_text("廣州")

pass

鼠標操作

from selenium import webdriver
//導入ActionChains
from selenium.webdriver.common.action_chains import ActionChains

wd = webdriver.Chrome()
wd.implicitly_wait(10)
wd.get('file:///D:/testing/1.html')

//創建對象
ac = ActionChains(wd)
//移動鼠標操作
ac.move_to_element(wd.find_element_by_id("bjn")).perform()

彈出框

from selenium import webdriver
wd = webdriver.Chrome()
wd.implicitly_wait(5)
wd.get('file:///D:/testing/1.html')

wd.find_element_by_id('btn1').click()
print(wd.switch_to.alert.text)
wd.switch_to.alert.accept()

wd.find_element_by_id('btn2').click()
print(wd.switch_to.alert.text)
wd.switch_to.alert.dismiss()

wd.find_element_by_id('btn3').click()
alert1 = wd.switch_to.alert
print(wd.switch_to.alert.text)
alert1.send_keys("jenniferZ")

pass

報錯

1.

Traceback (most recent call last):
  File "C:\Users\Rock\AppData\Local\Programs\Python\Python38-32\4.py", line 32, in <module>
    print(element7.get_attribute('innerText'))
AttributeError: 'list' object has no attribute 'get_attribute'

列表沒有get_attribute屬性

解釋:find_elements_by_tag_name和find_elements_by_tag_name獲取的都是數組

2.

 

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