国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python WEB UI自動化測試(1)-Selenium基礎(chǔ)(史上最詳細,一篇就夠)

這篇具有很好參考價值的文章主要介紹了Python WEB UI自動化測試(1)-Selenium基礎(chǔ)(史上最詳細,一篇就夠)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、環(huán)境準(zhǔn)備

  1. Selenium安裝

命令行安裝

pip install selenium
  1. 瀏覽器驅(qū)動安裝

找到本地chrome的瀏覽器的版本

python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔
python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔

下載相應(yīng)版本的驅(qū)動器

chrome瀏覽器驅(qū)動下載

地址:chromedriver.storage.googleapis.com/index.html

python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔

下載完后,解壓到本地的python的目錄下

python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔

geckodriver:

https://firefox-source-docs.mozilla.org/testing/geckodriver/Support.html

edgedriver:

https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/#downloads

iedriver:

https://selenium-release.storage.googleapis.com/index.html

  1. selenium原理

對于每一條Selenium腳本,一個http請求會被創(chuàng)建并且發(fā)送給瀏覽器的驅(qū)動,瀏覽器驅(qū)動中包含了一個HTTP Server,用來接收這些http請求,HTTP Server接收到請求后根據(jù)請求來具體操控對應(yīng)的瀏覽器,瀏覽器執(zhí)行具體的測試步驟,瀏覽器將步驟執(zhí)行結(jié)果返回給HTTP Server,HTTP Server又將結(jié)果返回給Selenium的腳本,如果是錯誤的http代碼我們就會在控制臺看到對應(yīng)的報錯信息。

python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔

二、Selenium入門實例

import time
#導(dǎo)入包
from selenium import webdriver
# 創(chuàng)建瀏覽器驅(qū)動
driver = webdriver.Chrome()
# 打開網(wǎng)頁
driver.get('http://localhost:8909/fIndex')
# 停止三秒
time.sleep(3)
# 退出瀏覽器
driver.quit()

彈出瀏覽器,自動打開http://localhost:8909/fIndex,三秒后自動退出瀏覽器

python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔

三、元素定位

  1. selenium元素定位方式類型

Selenium提供了八種定位元素方式

1.id

2.name

3.class_name

4.tag_name

5.link_text

6.partial_link_text

7.XPath

8.CSS

  1. id定位元素

find_element_by_id

find_element_by_id,如果匹配到多個id,取得是第一個元素的值;

element=driver.find_element_by_id(id)

python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔
import time
#導(dǎo)入包
from selenium import webdriver
# 創(chuàng)建瀏覽器驅(qū)動
driver = webdriver.Chrome()
# 打開網(wǎng)頁
driver.get('http://localhost:8909/fIndex')

driver.find_element_by_id('box').click()
# 停止三秒
time.sleep(3)
# 退出瀏覽器
# driver.quit()
python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔

find_elements_by_id

find_elements_by_id,如果匹配多多個元素,就是一個集合,我們可以通過索引打開相應(yīng)的元素;

elements=driver.find_elements_by_id(id)

import time
#導(dǎo)入包
from selenium import webdriver
# 創(chuàng)建瀏覽器驅(qū)動
driver = webdriver.Chrome()
# 打開網(wǎng)頁
driver.get('http://localhost:8909/fIndex')

driver.find_elements_by_id('box')[1].click()
# 停止三秒
time.sleep(3)
# 退出瀏覽器
# driver.quit()
python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔
  1. name定位元素

find_element_by_name

python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔
import time
#導(dǎo)入包
from selenium import webdriver
# 創(chuàng)建瀏覽器驅(qū)動
driver = webdriver.Chrome()
# 打開網(wǎng)頁
driver.get('http://www.baidu.com')

driver.find_element_by_name('tj_briicon').click()
# 停止三秒
time.sleep(3)
# 退出瀏覽器
# driver.quit()
python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔
  1. class_name定位元素

find_element_by_class_name

python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔
import time
#導(dǎo)入包
from selenium import webdriver
# 創(chuàng)建瀏覽器驅(qū)動
driver = webdriver.Chrome()
# 打開網(wǎng)頁
driver.get('http://localhost:8909/fIndex')

driver.find_element_by_class_name('el-input__inner').send_keys("測試")
# 停止三秒
time.sleep(3)
# 退出瀏覽器
# driver.quit()
python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔
  1. tag_name定位元素

find_element_by_tag_name

import time
#導(dǎo)入包
from selenium import webdriver
# 創(chuàng)建瀏覽器驅(qū)動
driver = webdriver.Chrome()
# 打開網(wǎng)頁
driver.get('http://localhost:8909/fIndex')

driver.find_element_by_tag_name('input').send_keys('input')
# 停止三秒
time.sleep(3)
# 退出瀏覽器
# driver.quit()
python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔
  1. partial_link_text定位元素

find_element_by_partial_link_text

說明:partial_link_text定位是對link_text定位的補充,link_text使用全部文本內(nèi)容匹配元素,而partial_link_text可以使用局部來匹配元素,也可以使用全部文本內(nèi)容匹配元素。

python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔
import time
#導(dǎo)入包
from selenium import webdriver
# 創(chuàng)建瀏覽器驅(qū)動
driver = webdriver.Chrome()
# 打開網(wǎng)頁
driver.get('http://localhost:8909/fIndex')

driver.find_element_by_partial_link_text('百度').click()
# 停止三秒
time.sleep(3)
# 退出瀏覽器
# driver.quit()
python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔
  1. link_text定位元素

link_text

說明:link_text定位是專門用來定位超鏈接元素(<a>標(biāo)簽,并且是通過超鏈接的文本內(nèi)容來定位元素)

import time
#導(dǎo)入包
from selenium import webdriver
# 創(chuàng)建瀏覽器驅(qū)動
driver = webdriver.Chrome()
# 打開網(wǎng)頁
driver.get('http://localhost:8909/fIndex')

driver.find_element_by_link_text('百度').click()
# 停止三秒
time.sleep(3)
# 退出瀏覽器
# driver.quit()
  1. Xpath定位元素

element=driver.find_element_by_xpath(xpath)

Xpath絕對路徑定位

絕對路徑:從最外層元素到指定元素之間所有經(jīng)過元素層級的路徑

1).絕對路徑以/html根節(jié)點開始,使用/來分隔元素層級;
如:/html/body/div/fieldset/p[1]/input
2).絕對路徑對頁面結(jié)構(gòu)要求比較嚴(yán)格,不建議使用
import time
#導(dǎo)入包
from selenium import webdriver
# 創(chuàng)建瀏覽器驅(qū)動
driver = webdriver.Chrome()
# 打開網(wǎng)頁
driver.get('http://localhost:8909/fIndex')

driver.find_element_by_xpath('/html/body/section/header/div/div[3]/div/div/input').send_keys('XPath絕對定位')
# 停止三秒
time.sleep(3)
# 退出瀏覽器
# driver.quit()
python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔

Xpath相對路徑

python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔
python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔

定位

1).相對路徑以//開始
2).格式://input或者//*
import time
#導(dǎo)入包
from selenium import webdriver
# 創(chuàng)建瀏覽器驅(qū)動
driver = webdriver.Chrome()
# 打開網(wǎng)頁
driver.get('http://localhost:8909/fIndex')

driver.find_element_by_xpath('//input[@placeholder="搜索帖子"]').send_keys('絕對定位')
# 停止三秒
time.sleep(3)
# 退出瀏覽器
# driver.quit()
  1. CSS定位元素

element=driver.find_element_by_css_selector(css_selector)

python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔
CSS定位常用策略(方式)
1.id選擇器
2.class選擇器
3.元素選擇器
4.屬性選擇器
5.層級選擇器

id選擇器

說明:根據(jù)元素id屬性來選擇
格式:#id
例如:#userA<選擇id屬性值為userA的元素>

class選擇器

說明:根據(jù)元素class屬性來選擇
格式:.class
例如:.telA<選擇class屬性值為telA的所有元素>

元素選擇器

說明:根據(jù)元素的標(biāo)簽名選擇
格式:element
例如:input<選擇所有input元素>

屬性選擇器

說明:根據(jù)元素的屬性名和值來選擇
格式:element[attribute=value]
例如:[type="password"]<選擇type屬性值為password的元素>
import time
#導(dǎo)入包
from selenium import webdriver
# 創(chuàng)建瀏覽器驅(qū)動
driver = webdriver.Chrome()
# 打開網(wǎng)頁
driver.get('http://localhost:8909/fIndex')

driver.find_element_by_css_selector('input[placeholder="搜索帖子"]').send_keys('CSS定位')
# 停止三秒
time.sleep(3)
# 退出瀏覽器
# driver.quit()
python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔
  1. XPath與CSS類似功能對比

定位方式

Xpath

CSS

元素名

//input

input

id

//input[@id='userA']

#userA

class

//*[@class='telA']

.telA

屬性

1.//*[text()="xxx"]

2.//input[starts-with(@attribute,'xxx')]

3.//input[contains(@attribute,'xxx')]

1.input[type^='p']

2.input[type$='d']

3.input[type*='w']

四、定位元素的另一種寫法

方法:find_element(by=By.ID,value=None)

備注:需要兩個參數(shù),第一個參數(shù)為定位的類型由By提供,第二個參數(shù)為定位的具體方式

示例:

#導(dǎo)包
from selenium.webdriver.common.by import By
from selenium import webdriver

# 創(chuàng)建瀏覽器驅(qū)動
driver = webdriver.Chrome()
# 打開網(wǎng)頁
driver.get('http://localhost:8909/fIndex')
driver.find_element(By.CSS_SELECTOR,'#emailA').send_keys("123@126.com")
driver.find_element(By.XPATH,'//*[@id="emailA"]').send_keys('234@qq.com')3.driver.find_element(By.ID,"userA").send_keys("admin")
driver.find_element(By.NAME,"passwordA").send_keys("123456")
driver.find_element(By.CLASS_NAME,"telA").send_keys("18611111111")
driver.find_element(By.TAG_NAME,'input').send_keys("123")
driver.find_element(By.LINK_TEXT,'訪問新浪網(wǎng)站').click()
driver.find_element(By.PARTIAL_LINK_TEXT,'訪問').click()

五、元素操作|瀏覽器操作方法

元素常用操作方法

1.click() 單擊元素
2.send_key() 給輸入框輸入值
3.clear() 輸入框清空

瀏覽器操作

1.maximize_window() 最大化瀏覽器窗口
2.set_window_size(width,height) 設(shè)置瀏覽器窗口大小
3.set_window_position(x,y) 設(shè)置瀏覽器窗口位置
4.back() 退回
5.forward() 前進
6.refresh() 刷新
7.close() 關(guān)閉窗口
8.quilt() 關(guān)閉瀏覽器驅(qū)動對象
9.title 獲取瀏覽器標(biāo)題
10.current_url 獲取當(dāng)前頁面URL
11.window_handles 先獲取所有窗口的句柄
import time
#導(dǎo)入包
from selenium import webdriver
# 創(chuàng)建瀏覽器驅(qū)動
driver = webdriver.Chrome()
# 打開網(wǎng)頁
driver.get('http://localhost:8909/fIndex')

#最大化瀏覽器
driver.maximize_window()
#刷新
driver.refresh()
#后退
driver.back()
#前進
driver.forward()
#設(shè)置瀏覽器大小
driver.set_window_size(300,300)
#設(shè)置瀏覽器位置
driver.set_window_position(300,200)#關(guān)閉瀏覽器單個窗口
driver.close()
#關(guān)閉瀏覽器所有窗口
driver.quit()
#獲取title
title=driver.title
#獲取當(dāng)前頁面url
url=driver.current_url

# 退出瀏覽器
# driver.quit()

切換窗口練習(xí)

import time

from selenium.webdriver.common.keys import Keys
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://localhost:8909/fIndex')
element = driver.find_element_by_xpath('//button[@type="button" and contains(@class,"el-button--default")]')
element.click()
# 獲取瀏覽器窗口
windows = driver.window_handles
# 切換到第一個窗口
driver.switch_to.window(windows[0])

獲取元素信息

1. size 返回元素大小
2. text 獲取元素的文本
3. get_attribute("xxx") 獲取屬性值,傳遞的參數(shù)為元素的屬性名
4. is_displayed() 判斷元素是否可見
5. is_enabled() 判斷元素是否可用
6. is_selected() 判斷元素是否選中,用來檢查復(fù)選框或單選按鈕是否被選中
提示:
1. size、text:為屬性,調(diào)用時無括號;如:xxx.size

六、鼠標(biāo)和鍵盤操作

鼠標(biāo)操作

說明:在Selenium中將操作鼠標(biāo)的方法封裝在ActionChains類中
實例化對象:
action = ActionChains(driver)
方法:
1. context_click(element) 右擊 --> 模擬鼠標(biāo)右鍵點擊效果
2. double_click(element) 雙擊 --> 模擬鼠標(biāo)雙擊效果
3. drag_and_drop(source, target) 拖動 --> 模擬鼠標(biāo)拖動效果
4. move_to_element(element) 懸停 --> 模擬鼠標(biāo)懸停效果
5. perform() 執(zhí)行 --> 此方法用來執(zhí)行以上所有鼠標(biāo)操作
為了更好的學(xué)習(xí)其他方法,我們先學(xué)習(xí)perform()執(zhí)行方法,因為所有的方法都需要執(zhí)行才能生效

鼠標(biāo)右鍵-context_click()

說明:對于點擊鼠標(biāo)右鍵,如果彈出的是瀏覽器默認(rèn)的菜單,Selenium沒有提供操作菜單選項的方法;
如果是自定義的右鍵菜單,則可以通過元素定位來操作菜單中的選項。
import time
#導(dǎo)入包
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

# 創(chuàng)建瀏覽器驅(qū)動
driver = webdriver.Chrome()
# 打開網(wǎng)頁
driver.get('http://localhost:8909/fIndex')

action = ActionChains(driver)
element = driver.find_element_by_css_selector('input[placeholder="搜索帖子"]').send_keys('CSS定位')
action.context_click(element)
action.perform()
# 停止三秒
time.sleep(3)
# 退出瀏覽器
# driver.quit()

鼠標(biāo)雙擊-double_click()

import time
#導(dǎo)入包
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

# 創(chuàng)建瀏覽器驅(qū)動
driver = webdriver.Chrome()
# 打開網(wǎng)頁
driver.get('http://localhost:8909/fIndex')

action = ActionChains(driver)
element = driver.find_element_by_css_selector('button[type="button"]>span')
action.double_click(element)
action.perform()
# 停止三秒
time.sleep(3)
# 退出瀏覽器
# driver.quit()

鼠標(biāo)拖動-drag_and_drop()

1. 源元素 source = driver.find_element_by_id(xxx)
2. 目標(biāo)元素 target = driver.find_element_by_id(xxx)
3. 調(diào)用方法 action.drag_and_drop(source, target).perform()

鼠標(biāo)懸停-move_to_element()

說明: 模擬鼠標(biāo)懸停在指定的的元素上

鍵盤操作

常用的鍵盤操作

send_keys(Keys.BACK_SPACE) 刪除鍵(BackSpace)
send_keys(Keys.SPACE) 空格鍵(Space)
send_keys(Keys.TAB) 制表鍵(Tab)
send_keys(Keys.ESCAPE) 回退鍵(Esc)
send_keys(Keys.ENTER) 回車鍵(Enter)
send_keys(Keys.CONTROL,'a') 全選(Ctrl+A)
send_keys(Keys.CONTROL,'c') 復(fù)制(Ctrl+C)
提示:以上方法就不一個一個講解了,因為調(diào)用方法都一樣;

DEMO

import time

from selenium.webdriver.common.keys import Keys
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://localhost:8909/fIndex')
element = driver.find_element_by_xpath('//input[@type="text"]')
element.send_keys('測試一下,刪除')
time.sleep(2)
#刪除鍵
element.send_keys(Keys.BACK_SPACE)
time.sleep(2)
# 全選
element.send_keys(Keys.CONTROL, 'a')
time.sleep(2)
# 復(fù)制
element.send_keys(Keys.CONTROL, 'c')
time.sleep(2)
# 粘貼
element.send_keys(Keys.CONTROL, 'v')
python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔

七、等待方式

  1. 隱示等待

概念:定位元素時,如果能定位到元素則直接返回該元素,不觸發(fā)等待; 如果不能定位到該元
素,則間隔一段時間后再去定位元素; 如果在達到最大時長時還沒有找到指定元素,則拋出元素
不存在的異常 NoSuchElementException
方法:driver.implicitly_wait(timeout)(timeout:為等待最大時長,單位:秒)
說明:隱式等待為全局設(shè)置(只需要設(shè)置一次,就會作用于所有元素)
  1. 顯示等待

概念:定位指定元素時,如果能定位到元素則直接返回該元素,不觸發(fā)等待; 如果不能定位到該
元素,則間隔一段時間后再去定位元素; 如果在達到最大時長時還沒有找到指定元素,則拋出超
時異常 TimeoutException 。

顯式等待是針對單一元素或一組元素進行智能等待,通過expected_conditions選擇等待條件

wait = WebDriverWait(driver,10)

wait.until(expected_conditions.element_to_be_clickable(By.ID, 'xx')) #直到條件滿足

wait.until_not(expected_conditions.element_to_be_clickable(By.ID,'xx'))#直到條件不滿足

expected_conditions提供的方法

#1.判斷當(dāng)前頁面的title是否完全等于(==)預(yù)期字符串,返回是布爾值
title_is

#2.判斷當(dāng)前頁面的title是否包含預(yù)期字符串,返回布爾值
title_contains 

#3.判斷某個元素是否被加到了dom樹里,并不代表該元素一定可見
presence_of_element_located

#4.判斷某個元素是否可見. 可見代表元素非隱藏,并且元素的寬和高都不等于0
visibility_of_element_located

#5.跟上面的方法做一樣的事情,只是上面的方法要傳入locator,這個方法直接傳定位到的element就好了
visibility_of

#6.判斷是否至少有1個元素存在于dom樹中。舉個例子,如果頁面上有n個元素的class都是'column-md-3',那么只要有1個元素存在,這個方法就返回True
presence_of_all_elements_located

#7.判斷某個元素中的text是否 包含 了預(yù)期的字符串
text_to_be_present_in_element

#8.判斷某個元素中的value屬性是否包含 了預(yù)期的字符串
text_to_be_present_in_element_value

#9.判斷該frame是否可以switch進去,如果可以的話,返回True并且switch進去,否則返回False
frame_to_be_available_and_switch_to_it

#10.判斷某個元素中是否不存在于dom樹或不可見
invisibility_of_element_located

#11.判斷某個元素中是否可見并且是enable的,這樣的話才叫clickable
element_to_be_clickable

#12.等某個元素從dom樹中移除,注意,這個方法也是返回True或False
staleness_of

#13.判斷某個元素是否被選中了,一般用在下拉列表>* element_selection_state_to_be:判斷某個元素的選中狀態(tài)是否符合預(yù)期
element_to_be_selected

#14.跟上面的方法作用一樣,只是上面的方法傳入定位到的element,而這個方法傳入locator
element_located_selection_state_to_be

#15.判斷頁面上是否存在alert
alert_is_present
import time

from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By

from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://localhost:8909/fIndex')
driver.implicitly_wait(10)
element = driver.find_element_by_xpath('//button[@type="button" and contains(@class,"el-button--default")]')
WebDriverWait(driver=driver,timeout=10,poll_frequency=0.5)\
    .until(expected_conditions.element_to_be_clickable((By.XPATH,'//button[@type="button" and contains(@class,"el-button--default")]')))
element.click()

使用匿名函數(shù)進行判斷

import time

from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By

from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://localhost:8909/fIndex')
driver.implicitly_wait(10)
element = driver.find_element_by_xpath('//button[@type="button" and contains(@class,"el-button--default")]')
WebDriverWait(driver=driver,timeout=10,poll_frequency=0.5)\
    .until(lambda x : x.find_element_by_xpath('//button[@type="button" and contains(@class,"el-button--default")]')
)
element.click()
  1. 強制等待

sleep(): 強制等待,設(shè)置固定休眠時間。后腳本的執(zhí)行過程中執(zhí)行 sleep()后線程休眠,而另外兩種線程不休眠。
import time

from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By

from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://localhost:8909/fIndex')
driver.implicitly_wait(10)
element = driver.find_element_by_xpath('//button[@type="button" and contains(@class,"el-button--default")]')
time.sleep.time(3)
element.click()

八、截圖方式

說明:在Selenium中,提供了截圖方法,我們只需要調(diào)用即可

方法:

整屏截圖:driver.get_screenshot_as_file(imgpath)#imgpath:圖片保存路徑

元素截圖:element.screenshot(imgpath)

一般使用比較多的是整屏幕截圖

下面我們編寫下代碼,場景為一個元素定位不到,隱式等待10秒后,出現(xiàn)報錯,然后截圖保存起來;

from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://localhost:8909/fIndex')
driver.implicitly_wait(10)
try:
    element = driver.find_element_by_xpath('//button[@type="button1" and contains(@class,"el-button--default")]')
    element.click()
except:
    driver.get_screenshot_as_file('loggin.png')
python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔

九、上傳文件

案例:用戶頭像上傳

adFileUpload=driver.find_element_by_name("file")//定位上傳控件

filePath="C:\\test\\uploadfile\\test.jpg";//定義了一個本地文件的路徑

adFileUpload.send_keys(filePath);//為上傳控件進行賦值操作,將需要上傳的文件的路

徑賦給控件

from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By

from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://localhost:8909/fIndex')
driver.implicitly_wait(10)
driver.find_element_by_xpath('//span[text()="登錄"]').click()
username=driver.find_element_by_xpath('//input[@placeholder="請輸入用戶名"]')
username.clear()
username.send_keys("admin")
password=driver.find_element_by_xpath('//input[@placeholder="請輸入密碼"]')
password.clear()
password.send_keys('123456')
driver.find_element_by_xpath('//span[text()="立即登錄"]').click()
driver.find_element_by_xpath('//div[@class="userInfo"]/span').click()
WebDriverWait(driver=driver,timeout=10,poll_frequency=0.5)\
    .until(expected_conditions.element_to_be_clickable((By.XPATH,'//li[text()="個人信息"]')))
driver.find_element_by_xpath('//li[text()="個人信息"]').click()

fileUpload=driver.find_element_by_xpath('//input[@type="file"]')
fileUpload.send_keys("C:\\Users\\Administrator\Pictures\\boxlist1pic2test.jpg")
python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔

十、JS操作

案例:個人信息里的生日修改

在實際操作過程中有一些控件沒有無法直接操作,需要借助js來完成,比如時間控件、隱藏的

select元素、只讀輸入框等等

js1=”document.getElementById('s').value='1987-10-12';”//修改某元素的value值

js2=”document.getElementsByClassName('s')[0].click();”//點擊某一個元素

js3=”document.getElementsByClassName('s')[0].readOnly=’’;”//修改只讀屬性為空,變成可以輸入的元素

driver.execute_script(js3)#執(zhí)行js

十一、iframe處理

說明:在Selenium中封裝了如何切換frame框架的方法
方法:
1). driver.switch_to.frame(frame_reference) --> 切換到指定frame的方法
frame_reference:可以為frame框架的name、id或者定位到的frame元素
2). driver.switch_to.default_content() --> 恢復(fù)默認(rèn)頁面方法
driver.switch_to.parent_frame()--->恢復(fù)到上級iframe頁面方法
在frame中操作其他頁面,必須先回到默認(rèn)頁面,才能進一步操作

測試Iframe地址

https://www.w3school.com.cn/tiy/t.asp?f=eg_js_alert

python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔

彈窗確認(rèn)的方式下面再講


from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions

driver = webdriver.Chrome()
driver.get("https://www.w3school.com.cn/tiy/t.asp?f=eg_js_alert")
# 切換到iframe頁面
driver.switch_to.frame('iframeResult')
# 顯示等待
WebDriverWait(driver=driver,timeout=10,poll_frequency=0.5).until(expected_conditions.element_to_be_clickable((By.XPATH,'//button[text()="試一試"]')))
# 點擊試一試按鈕
driver.find_element(By.XPATH,'//button[text()="試一試"]').click()
# 切換到彈窗
alert = driver.switch_to.alert
# 確認(rèn)彈窗
alert.accept()
# 切換回默認(rèn)的頁面
driver.switch_to.default_content()
# 切換主題
driver.find_element(By.XPATH,'//a[@title="更改主題"]').click()
python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔

如果我們沒切換回默認(rèn)頁面,就會報錯,說找不到這個元素,我們注釋掉代碼可以看到;

python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔

十二、彈出框處理

網(wǎng)頁中常用的彈出框有三種
1. alert 警告框
2. confirm 確認(rèn)框
3. prompt 提示框

彈窗的形式

python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔

彈出框處理方法

說明:Selenium中對處理彈出框的操作,有專用的處理方法;并且處理的方法都一樣
1. 獲取彈出框?qū)ο?/span>
alert = driver.switch_to.alert
2. 調(diào)用
alert.text --> 返回alert/confirm/prompt中的文字信息
alert.accept() --> 接受對話框選項
alert.dismiss() --> 取消對話框選項

大家可以使用一下鏈接都操作下各個類型彈框

只有確認(rèn)的彈框

https://www.w3school.com.cn/tiy/t.asp?f=eg_js_alert

有確認(rèn)和取消的彈框

https://www.w3school.com.cn/tiy/t.asp?f=eg_js_confirm

有輸入框的彈框

https://www.w3school.com.cn/tiy/t.asp?f=eg_js_prompt

有提醒語的彈框

https://www.w3school.com.cn/tiy/t.asp?f=eg_js_alert_2

這里的DEMO和上面的以上,大家可以操作不同的彈窗聯(lián)系下

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions

driver = webdriver.Chrome()
driver.get("https://www.w3school.com.cn/tiy/t.asp?f=eg_js_alert")
# 切換到iframe頁面
driver.switch_to.frame('iframeResult')
# 顯示等待
WebDriverWait(driver=driver,timeout=10,poll_frequency=0.5).until(expected_conditions.element_to_be_clickable((By.XPATH,'//button[text()="試一試"]')))
# 點擊試一試按鈕
driver.find_element(By.XPATH,'//button[text()="試一試"]').click()
# 切換到彈窗
alert = driver.switch_to.alert
# 確認(rèn)彈窗
alert.accept()
# 切換回默認(rèn)的頁面
driver.switch_to.default_content()
# 切換主題
driver.find_element(By.XPATH,'//a[@title="更改主題"]').click()

十三、選擇框處理

#對下拉框進行操作時首先要定位到這個下拉框,new 一個Selcet對象,然后對它進行操作
from selenium.webdriver.support.select import Select
#找到下拉選擇框的元素:
select = driver.find_element_by_id("areaID")
#選擇對應(yīng)的選擇項:
Select(select).select_by_visible_text("天津市")#通過可見文本去選擇
Select(select).select_by_value("shanxi")#通過html中的value值去選擇
Select(select).select_by_index(1)#通過index(索引從0開始)選擇

#單選框
#單選按鈕就當(dāng)按鈕處理理解起來就簡單了
r_sex = driver.find_element_by_id("sexID2") #找到單選框元素
r_sex.click() #選擇某個單選項
r_sex.is_selected() #判斷某個單選項是否已經(jīng)被選擇 #返回的是Boolean類型

#復(fù)選框
#多選項的操作和單選的差不多:
checkBox = driver.find_element_by_id("u1") checkbox.click() #點擊復(fù)選框
checkbox.clear() #清除復(fù)選框
checkbox .is_selected() #判斷復(fù)選框是否被選中
checkbox .is_enabled() #判斷復(fù)選框是否可用

單選框

Demo如下:

from selenium.webdriver.support.select import Select
from selenium import webdriver


driver = webdriver.Chrome()
driver.get("https://www.w3school.com.cn/tiy/t.asp?f=eg_html_radiobuttons")

driver.switch_to.frame("iframeResult")
#單選框
#單選按鈕就當(dāng)按鈕處理理解起來就簡單了
r_sex = driver.find_element_by_xpath('//input[@value="female"]') #找到單選框元素
r_sex.click() #選擇某個單選項
result = r_sex.is_selected() #判斷某個單選項是否已經(jīng)被選擇 #返回的是Boolean類型
print(result)
python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔

復(fù)選框

from selenium import webdriver


driver = webdriver.Chrome()
driver.get("https://www.w3school.com.cn/tiy/t.asp?f=eg_html_checkboxes")

#切換到iframe
driver.switch_to.frame("iframeResult")
#復(fù)選框
#多選項的操作和單選的差不多:

Bike = driver.find_element_by_name("Bike")
Bike.click()
Car = driver.find_element_by_name("Car")
Car.click()
selectFlag = Bike .is_selected() #判斷復(fù)選框是否被選中
print(selectFlag)
enableFlag = Bike .is_enabled() #判斷復(fù)選框是否可用
print(enableFlag)
python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔

下拉框

import time

from selenium.webdriver.support.select import Select
from selenium import webdriver


driver = webdriver.Chrome()
driver.get("https://www.w3school.com.cn/tiy/t.asp?f=eg_html_dropdownbox")

#切換到iframe
driver.switch_to.frame("iframeResult")

#找到下拉選擇框的元素:
select = driver.find_element_by_name("cars")
#選擇對應(yīng)的選擇項:
Select(select).select_by_visible_text("Volvo")#通過可見文本去選擇
time.sleep(2)
Select(select).select_by_value("saab")#通過html中的value值去選擇
time.sleep(2)
Select(select).select_by_index(3)#通過index(索引從0開始)選擇
time.sleep(2)

十四、滾動條操作

說明:selenium中并沒有直接提供操作滾動條的方法,但是它提供了可執(zhí)行JavaScript腳本
的方法,所以我們可以通過JavaScript腳本來達到操作滾動條的目的。

1. 設(shè)置JavaScript腳本控制滾動條

js = "window.scrollTo(0,1000)"

(0:左邊距;1000:上邊距;單位像素)

2. selenium調(diào)用執(zhí)行JavaScript腳本的方法

driver.execute_script(js)

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.w3school.com.cn/index.html")

# 1. 設(shè)置JavaScript腳本控制滾動條
js = "window.scrollTo(0,1000)"
# (0:左邊距;1000:上邊距;單位像素)
# 2. selenium調(diào)用執(zhí)行JavaScript腳本的方法
driver.execute_script(js)
python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔

十五、驗證碼處理

方式

說明:Selenium中并沒有對驗證碼處理的方法,在這里我們介紹一下針對驗證碼的幾種常用處理方式
方式:
1). 去掉驗證碼
(測試環(huán)境下-采用)
2). 設(shè)置萬能驗證碼
(生產(chǎn)環(huán)境和測試環(huán)境下-采用)
3). 驗證碼識別技術(shù)
(通過Python-tesseract來識別圖片類型驗證碼;識別率很難達到100%)
4). 記錄cookie
(通過記錄cookie進行跳過登錄)

cookie是什么?

python web ui自動化測試,UI自動化測試,自動化,pytest,Powered by 金山文檔
1. Cookie是由Web服務(wù)器生成的,并且保存在用戶瀏覽器上的小文本文件,它可以包含用戶相關(guān)的信息。
2. Cookie數(shù)據(jù)格式:鍵值對組成(python中的字典)
3. Cookie產(chǎn)生:客戶端請求服務(wù)器,如果服務(wù)器需要記錄該用戶狀態(tài),就向客戶端瀏覽器頒發(fā)一個Cookie
數(shù)據(jù)
4. Cookie使用:當(dāng)瀏覽器再次請求該網(wǎng)站時,瀏覽器把請求的數(shù)據(jù)和Cookie數(shù)據(jù)一同提交給服務(wù)器,服務(wù)
器檢
查該Cookie,以此來辨認(rèn)用戶狀態(tài)。

selenium操作cookie

說明:Selenium中對cookie操作提供相應(yīng)的方法
方法:
1. get_cookie(name) --> 獲取指定cookie
name:為cookie的名稱
2. get_cookies() --> 獲取本網(wǎng)站所有本地cookies
3. add_cookie(cookie_dict) --> 添加cookie
cookie_dict:一個字典對象,必選的鍵包括:"name" and "value"

案例

from selenium import webdriver
import time
import requests

#這里我們可以通過使用requests庫去調(diào)用登錄接口,然后,拿到接口返回的cookie的值,然后通過selenium
#把獲取到的值寫入到cookie
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.add_cookie({'name':'BDUSS','value':'根據(jù)實際填寫'})
time.sleep(3)
driver.refresh()
time.sleep(3)
driver.quit()

Selenium基礎(chǔ)到此結(jié)束,后面會從零開始搭建UI自動化測試框架,感興趣的朋友關(guān)注下,點贊下,謝謝!

后續(xù)更新中。。。。。。。。。。。文章來源地址http://www.zghlxwxcb.cn/news/detail-771852.html

到了這里,關(guān)于Python WEB UI自動化測試(1)-Selenium基礎(chǔ)(史上最詳細,一篇就夠)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Python Selenium UI自動化測試_python 自動化ui測試

    Python Selenium UI自動化測試_python 自動化ui測試

    2.2 安裝selenium pip install selenium pip install selenium==2.53.0 2.3 下載webdriver驅(qū)動 以chrome瀏覽器為例 查看chrome瀏覽器版本:在地址欄輸入 chrome://version chromedriver下載地址:http://chromedriver.storage.googleapis.com/index.html 下載與瀏覽器版本對應(yīng)的chrome driver 將下載好的chrome driver 解壓,并放至到

    2024年04月14日
    瀏覽(27)
  • 基于Selenium的Web UI自動化測試框架開發(fā)實戰(zhàn)

    基于Selenium的Web UI自動化測試框架開發(fā)實戰(zhàn)

    1、自研自動化測試框架 首先進行需求分析。概要設(shè)計包括以下三大模塊: 公共函數(shù)庫模塊(包括可復(fù)用函數(shù)庫、日志管理、報表管理及發(fā)送郵件管理); 測試用例倉庫模塊(具體用例的相關(guān)管理); 可視化頁面管理模塊(單獨針對Web頁面進行抽象,封裝頁面元素和操作方

    2024年01月20日
    瀏覽(114)
  • Selenium——基于Web的UI自動化測試工具(一)

    ????????Selenium是一個自動化測試工具,用于模擬用戶在Web上的行為。它支持多種瀏覽器,如Chrome、Firefox、IE等。Selenium可以實現(xiàn)多種操作,包括打開瀏覽器、導(dǎo)航到指定URL、填寫表單、點擊按鈕、獲取頁面元素等。 ????????Selenium有多種語言實現(xiàn),包括Java、Python、C#等

    2024年04月13日
    瀏覽(27)
  • web UI 自動化測試:Selenium 語法詳解 史上最全

    web UI 自動化測試:Selenium 語法詳解 史上最全

    selenium主要是用來做自動化測試,支持多種瀏覽器,爬蟲中主要用來解決JavaScript渲染問題。模擬瀏覽器進行網(wǎng)頁加載 一、聲明瀏覽器對象 二、訪問頁面并獲取網(wǎng)頁html 三、查找元素 單個元素 常用的查找方法 也可以使用通用的方法 四、元素交互操作-搜索框傳入進行自

    2024年02月21日
    瀏覽(25)
  • Web UI 自動化測試框架(Pytest+Selenium+Allure+Loguru)

    本框架主要是基于 Python + pytest + selenium + Allure + loguru + 郵件通知/企業(yè)微信通知/釘釘通知 實現(xiàn)的WEB UI自動化框架。 基于PageObject設(shè)計模式結(jié)合,該平臺可實現(xiàn)測試用例的自動化執(zhí)行及自動化測試報告的生成同時包括自動化測試執(zhí)行時,用例失敗的截圖操作。 使用webdriver_manag

    2024年02月04日
    瀏覽(363)
  • Python Selenium UI自動化測試_python 自動化ui測試,Kotlin可能帶來的一個深坑

    Python Selenium UI自動化測試_python 自動化ui測試,Kotlin可能帶來的一個深坑

    :層級選取,如:#formspaninput 舉例:div.entry-sider-panelsection.entry-sider-panel__bddivdiv:nth-child(1) 3.3 元素操作 3.3.1 輸入內(nèi)容 send_keys() 3.3.2 點擊元素 click() 3.3.3 清空元素文本內(nèi)容 clear() 3.3.4 獲取元素文本 text 返回的是字符串 3.3.5 獲取元素尺寸 size 返回的是字典 3.3.6 獲取元素的屬性值

    2024年04月25日
    瀏覽(45)
  • 軟測入門(三)Selenium(Web自動化測試基礎(chǔ))

    軟測入門(三)Selenium(Web自動化測試基礎(chǔ))

    Selenium是一個用于Web應(yīng)用程序測試的工具:中文是 硒 開源 跨平臺:linux、windows、mac 核心:可以在多個瀏覽器上進行自動化測試 多語言 Selenium WebDriver控制原理 Selenium Client Library:通過他們提供的庫來編寫腳本,可以使用Java、Python等進行編寫腳本 JSON Wire Protocol是在HTTP服務(wù)器之

    2024年02月12日
    瀏覽(43)
  • 【自動化測試】基于Selenium + Python的web自動化框架

    【自動化測試】基于Selenium + Python的web自動化框架

    Selenium是一個基于瀏覽器的自動化工具,她提供了一種跨平臺、跨瀏覽器的端到端的web自動化解決方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid: ? 1、Selenium IDE:Firefox的一個擴展,它可以進行錄制回放,并可以把錄制的操作以多種語言(例如java,p

    2024年02月07日
    瀏覽(19)
  • Python Selenium搭建UI自動化測試框架

    自動化測試是軟件測試中非常重要的一部分,可以提高測試效率和測試覆蓋率。在UI自動化測試中,Selenium是非常流行的工具。本文將介紹如何使用Python和Selenium搭建UI自動化測試框架。 在開始搭建UI自動化測試框架之前,需要先安裝Python和Selenium。可以從Python官網(wǎng)下載Python安裝

    2023年04月27日
    瀏覽(22)
  • 【UI自動化測試技術(shù)】自動化測試研究:Python+Selenium+Pytest+Allure,詳解UI自動化測試,學(xué)習(xí)模擬鼠標(biāo)+模擬鍵盤進行相關(guān)操作(精)(四)

    1、了解元素交互的常用方法 2、學(xué)習(xí)如何對多選元素進行操作 3、 學(xué)習(xí)模擬鼠標(biāo)進行相關(guān)操作 ( 本節(jié)目標(biāo) ) 4、 學(xué)習(xí)模擬鍵盤進行相關(guān)操作 ( 本節(jié)目標(biāo) ) 用于向 Web 瀏覽器提供虛擬化設(shè)備輸入操作的低級接口.除了剛剛講過的Web元素交互之外, Actions 接口 還提供了對指定輸

    2024年03月24日
    瀏覽(92)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包