本次测试网站:顺丰快递
难点为第六、七题
软件版本:
pytest:8.4.2
selenium:4.38.0
chrome:142.0.7444.135 (正式版本)
代码写的很烂不喜勿喷
import os
from datetime import datetime
from time import sleep
import pytest
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
@pytest.fixture( scope="function" )
def driver():
# 提交最终代码脚本时,请将驱动路径换回官方路径"C:\\Users\\86153\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe"
service = Service(
# executable_path="C:\\Users\\86153\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe"
executable_path="./chromedriver.exe",
)
driver = webdriver.Chrome( service=service )
driver.get( "https://www.sf-express.com/" )
driver.maximize_window()
driver.implicitly_wait( 10 )
yield driver
driver.quit()
class TestSF:
# test-code-start
@pytest.mark.parametrize(
#出发地 目的地 出发地区 目的区 详细地址1 详细地址2
"start,end,start_city,end_city,address1,address2,file",[
("广州市","南京市","黄埔区","鼓楼区","黄埔东苑","南京大学","SF_R001_001.png"),
("南京市","广州市","鼓楼区","黄埔区","南京大学","黄埔东苑","SF_R001_002.png")
]
)
def test_SF_R001(self,driver,start,end,start_city,end_city,address1,address2,file):
#打开服务支持
driver.find_element(By.LINK_TEXT,"服务支持").click()
sleep(1)
#运费时效
driver.find_element(By.XPATH,'//ul[@class="level1-menu"]//li').click()
sleep(1)
#出发地点击
click_div=driver.find_element(By.XPATH,'//div[@class="item-input item-city cursor-point"]')
click_div.click()
sleep(1)
#输入地址
city_search=driver.find_element(By.CLASS_NAME,'city-search')
city_search.send_keys(start)
sleep(1)
#点击区
driver.find_element(By.XPATH,f'//div[@class="search-result"]//li[contains(.,"{start_city}")]').click()
sleep(1)
#详细地址
address=driver.find_elements(By.XPATH,'//div[@class="address-detailed address-detail-area"]//input')
address[0].send_keys(address1)
sleep(1)
#点击目的地
click_div = driver.find_element(By.XPATH, '//div[@class="item-input item-city cursor-point"]')
click_div.click()
sleep(1)
city_search = driver.find_element(By.CLASS_NAME, 'city-search')
city_search.send_keys(end)
sleep(2)
#目的地区
driver.find_element(By.XPATH,f'//div[@class="search-result"]//li[contains(.,"{end_city}")]').click()
sleep(2)
#目的详细地址
address[1].send_keys(address2)
sleep(1)
#输入重量
driver.find_element(By.XPATH,'//div[@class="weight"]//input').send_keys("5")
#获取长宽高的输入框
input_list=driver.find_elements(By.XPATH,'//div[@class="query-volume flex-between"]//input')
#长
input_list[0].send_keys("20")
#宽
input_list[1].send_keys("15")
#高
input_list[2].send_keys("25")
sleep(1)
#点击日期框
driver.find_element(By.ID,'datetime').click()
sleep(1)
#点击具体日期
driver.find_element(By.XPATH,'//div[@class="el-picker-panel__content"]//span[contains(.,"16")]').click()
sleep(1)
#点击确定
driver.find_element(By.XPATH,'//button[@class="el-button el-picker-panel__link-btn el-button--default el-button--mini is-plain"]').click()
#点击查询
sleep(1)
driver.find_element(By.CLASS_NAME,'submit-area').click()
sleep(3)
self.take_screenshot(driver,file)
def test_SF_R002(self,driver):
# 打开服务支持
driver.find_element(By.LINK_TEXT, "服务支持").click()
sleep(1)
# 运费时效
driver.find_element(By.XPATH, '//ul[@class="level1-menu"]//li').click()
sleep(1)
#出发地
click_div = driver.find_element(By.XPATH, '//div[@class="item-input item-city cursor-point"]')
click_div.click()
sleep(1)
#点击港澳台
driver.find_element(By.XPATH,'//div[@class="tabs"]//li[last()]').click()
sleep(1)
#点击香港
driver.find_element(By.XPATH,'//ul[@class="card-inner flex"]//li[contains(.,"香港")]').click()
sleep(1)
#选择九龙区
driver.find_element(By.XPATH,'//div[@class="card"]//li[contains(.,"九龙")]').click()
#目的地
click_div = driver.find_element(By.XPATH, '//div[@class="item-input item-city cursor-point"]')
click_div.click()
sleep(1)
#选择南京
driver.find_element(By.XPATH,'//ul[@class="card-inner flex"]//li[last()]').click()
sleep(1)
#选择鼓楼
driver.find_element(By.XPATH, '//div[@class="card"]//li[contains(.,"鼓楼")]').click()
sleep(1)
# 输入重量
driver.find_element(By.XPATH, '//div[@class="weight"]//input').send_keys("5")
# 获取长宽高的输入框
input_list = driver.find_elements(By.XPATH, '//div[@class="query-volume flex-between"]//input')
# 长
input_list[0].send_keys("20")
# 宽
input_list[1].send_keys("15")
# 高
input_list[2].send_keys("25")
sleep(1)
# 点击日期框
driver.find_element(By.ID, 'datetime').click()
sleep(1)
#选择此刻
driver.find_element(By.XPATH,'//button[@class="el-button el-picker-panel__link-btn el-button--text el-button--mini"]').click()
sleep(1)
# 点击查询
sleep(1)
driver.find_element(By.CLASS_NAME, 'submit-area').click()
sleep(3)
#往上滑
driver.execute_script("window.scrollTo(0, 200);")
sleep(2)
self.take_screenshot(driver, "SF_R002_001.png")
def test_SF_R003(self,driver):
# 打开服务支持
driver.find_element(By.LINK_TEXT, "服务支持").click()
sleep(1)
# 运费时效
driver.find_element(By.XPATH, '//ul[@class="level1-menu"]//li').click()
sleep(1)
# 出发地
click_div = driver.find_element(By.XPATH, '//div[@class="item-input item-city cursor-point"]')
click_div.click()
sleep(1)
# 点击港澳台
driver.find_element(By.XPATH, '//div[@class="tabs"]//li[last()]').click()
sleep(1)
# 点击香港
driver.find_element(By.XPATH, '//ul[@class="card-inner flex"]//li[contains(.,"香港")]').click()
sleep(1)
# 选择九龙区
driver.find_element(By.XPATH, '//div[@class="card"]//li[contains(.,"九龙")]').click()
# 目的地
click_div = driver.find_element(By.XPATH, '//div[@class="item-input item-city cursor-point"]')
click_div.click()
sleep(1)
# 选择南京
driver.find_element(By.XPATH, '//ul[@class="card-inner flex"]//li[last()]').click()
sleep(1)
# 选择鼓楼
driver.find_element(By.XPATH, '//div[@class="card"]//li[contains(.,"鼓楼")]').click()
sleep(1)
# 输入重量
weight=driver.find_element(By.XPATH, '//div[@class="weight"]//input')
weight.clear()
weight.send_keys("100")
sleep(1)
# 点击日期框
driver.find_element(By.ID, 'datetime').click()
sleep(1)
time_input=driver.find_elements(By.XPATH,'//div[@class="el-date-picker__time-header"]//input')
time_input[0].send_keys("2025-11-17")
time_input[1].send_keys(Keys.CONTROL + 'a')
time_input[1].send_keys(Keys.DELETE)
time_input[1].send_keys("15:00:00")
sleep(1)
# 点击确定
driver.find_element(By.XPATH,'//button[@class="el-button el-picker-panel__link-btn el-button--default el-button--mini is-plain"]').click()
# 点击查询
driver.find_element(By.CLASS_NAME, 'submit-area').click()
sleep(3)
# 往上滑
driver.execute_script("window.scrollTo(0, 200);")
sleep(2)
self.take_screenshot(driver, "SF_R003_001.png")
@pytest.mark.parametrize(
"weight,long,width,height,file",
[
("19","5","8","6","SF_R004_001.png"),
("20","5","8","6","SF_R004_002.png"),
("19","100","80","90","SF_R004_003.png"),
("20","100","80","90","SF_R004_004.png"),
]
)
def test_SF_R004(self,driver,weight,long,width,height,file):
# 打开服务支持
driver.find_element(By.LINK_TEXT, "服务支持").click()
sleep(1)
# 运费时效
driver.find_element(By.XPATH, '//ul[@class="level1-menu"]//li').click()
sleep(1)
# 出发地
click_div = driver.find_element(By.XPATH, '//div[@class="item-input item-city cursor-point"]')
click_div.click()
sleep(1)
# 点击港澳台
driver.find_element(By.XPATH, '//div[@class="tabs"]//li[last()]').click()
sleep(1)
# 点击香港
driver.find_element(By.XPATH, '//ul[@class="card-inner flex"]//li[contains(.,"香港")]').click()
sleep(1)
# 选择九龙区
driver.find_element(By.XPATH, '//div[@class="card"]//li[contains(.,"九龙")]').click()
# 目的地
click_div = driver.find_element(By.XPATH, '//div[@class="item-input item-city cursor-point"]')
click_div.click()
sleep(1)
# 选择南京
driver.find_element(By.XPATH, '//ul[@class="card-inner flex"]//li[last()]').click()
sleep(1)
# 选择鼓楼
driver.find_element(By.XPATH, '//div[@class="card"]//li[contains(.,"鼓楼")]').click()
sleep(1)
# 输入重量
weights = driver.find_element(By.XPATH, '//div[@class="weight"]//input')
weights.clear()
weights.send_keys(weight)
sleep(1)
# 获取长宽高的输入框
input_list = driver.find_elements(By.XPATH, '//div[@class="query-volume flex-between"]//input')
# 长
input_list[0].send_keys(long)
# 宽
input_list[1].send_keys(width)
# 高
input_list[2].send_keys(height)
sleep(1)
# 点击日期框
driver.find_element(By.ID, 'datetime').click()
sleep(1)
time_input = driver.find_elements(By.XPATH, '//div[@class="el-date-picker__time-header"]//input')
time_input[0].send_keys("2025-11-18")
time_input[1].send_keys(Keys.CONTROL + 'a')
time_input[1].send_keys(Keys.DELETE)
time_input[1].send_keys("8:00:00")
sleep(1)
# 点击确定
driver.find_element(By.XPATH,'//button[@class="el-button el-picker-panel__link-btn el-button--default el-button--mini is-plain"]').click()
# 点击查询
driver.find_element(By.CLASS_NAME, 'submit-area').click()
sleep(3)
driver.execute_script("window.scrollTo(0, 200);")
#点击大件
driver.find_element(By.XPATH,'(//ul[@class="tabs"]//li)[2]').click()
sleep(1)
self.take_screenshot(driver,file)
def test_SF_005(self,driver):
# 打开服务支持
driver.find_element(By.LINK_TEXT, "服务支持").click()
sleep(1)
# 运费时效
driver.find_element(By.XPATH, '//ul[@class="level1-menu"]//li').click()
sleep(1)
#获取服务列表
servies_list=driver.find_elements(By.XPATH,'//div[@class="other-services"]//a')
sleep(1)
for servies in servies_list:
servies.click()
handle=driver.window_handles
count=0
# driver.close()
for i in handle:
driver.switch_to.window(i)
sleep(1)
self.take_screenshot(driver,"SF_005_00%s.png"%str(count))
count+=1
driver.close()
def test_SF_006(self,driver):
# 打开服务支持
driver.find_element(By.LINK_TEXT, "服务支持").click()
sleep(1)
# 服务网点
driver.find_element(By.XPATH, '(//ul[@class="side-child expand"]//li)[2]').click()
sleep(1)
#输入城市
driver.find_element(By.ID,'range-query-citypicker').click()
sleep(1)
driver.find_element(By.XPATH,'//ul[@class="card-inner flex"]//li[contains(.,"上海")]').click()
sleep(1)
driver.find_element(By.XPATH,'//ul[@class="card-inner flex"]//li[contains(.,"黄")]').click()
#查询
driver.find_element(By.ID,'range-key-word').send_keys("兴业太古汇")
sleep(1)
driver.find_element(By.XPATH,'//div[@class="key-word-query"]//li').click()
sleep(1)
driver.find_element(By.CLASS_NAME,'search-btn').click()
sleep(3)
driver.execute_script("window.scrollTo(0, 220);")
actions=ActionChains(driver)
sleep(1)
actions.move_to_element(driver.find_element(By.CSS_SELECTOR,'#chn > div > div.right > div > div.main-box > div.result-box > div > div:nth-child(1) > div:nth-child(1) > div:nth-child(2) > div:nth-child(2) > span:nth-child(7)')).click().perform()
sleep(1)
#鼠标移动到目标悬浮
actions.move_to_element(driver.find_element(By.CLASS_NAME,'BMap_stdMpSliderMask')).perform()
#点击市
driver.find_element(By.CLASS_NAME,'BMap_zlCity').click()
sleep(3)
self.take_screenshot(driver,"SF_006_001.png")
@pytest.mark.parametrize(
"start,city,address,file",[
("广州市","天河区","天河城","SF_007_001.png"),
("深圳市","福田区","天虹商场","SF_007_002.png"),
("南京市","玄武区","新世界百货","SF_007_003.png"),
("杭州市","西湖区","西城广场","SF_007_004.png"),
]
)
def test_SF_007(self,driver,start,city,address,file):
# 打开服务支持
driver.find_element(By.LINK_TEXT, "服务支持").click()
sleep(1)
# 服务网点
driver.find_element(By.XPATH, '(//ul[@class="side-child expand"]//li)[2]').click()
sleep(1)
# 输入城市
driver.find_element(By.ID, 'range-query-citypicker').click()
sleep(1)
driver.find_element(By.CLASS_NAME,'city-search').send_keys(start)
sleep(1)
#选择区
driver.find_element(By.XPATH,f'//div[@class="search-result"]//li[contains(.,"{city}")]').click()
sleep(1)
driver.find_element(By.ID, 'range-key-word').send_keys(address)
sleep(1)
driver.find_element(By.XPATH, '//div[@class="key-word-query"]//li').click()
sleep(1)
driver.find_element(By.CLASS_NAME,'search-btn').click()
sleep(3)
driver.execute_script("window.scrollTo(0, 220);")
sleep(1)
actions=ActionChains(driver)
# sleep(10000)
#选择对应店铺
if start=="广州市":
driver.find_element(By.CSS_SELECTOR,'div.result-box > div > div:nth-child(1) > div:nth-child(1) > div:nth-child(2) > div:nth-child(2) > span:nth-child(2)').click()
if start=="深圳市":
driver.find_element(By.CSS_SELECTOR,"div.result-box > div > div:nth-child(1) > div:nth-child(1) > div:nth-child(2) > div:nth-child(2) > span:nth-child(38)").click()
if start=="南京市":
driver.find_element(By.CSS_SELECTOR,"div.result-box > div > div:nth-child(1) > div:nth-child(1) > div:nth-child(2) > div:nth-child(2) > span:nth-child(62)").click()
if start=="杭州市":
driver.find_element(By.CSS_SELECTOR,'div.result-box > div > div:nth-child(1) > div:nth-child(1) > div:nth-child(2) > div:nth-child(2) > span:nth-child(87)').click()
#获取拖动条
SliderBar=driver.find_element(By.CLASS_NAME,'BMap_stdMpSliderBar')
actions.click_and_hold(SliderBar).move_by_offset(0,-100).release().perform()
sleep(10)
def test_SF_008(self,driver,name,actives,file):
# 打开服务支持
driver.find_element(By.LINK_TEXT, "服务支持").click()
sleep(1)
#收寄标准
driver.find_element(By.XPATH, '(//ul[@class="side-child expand"]//li)[3]').click()
sleep(1)
#点击出发地
driver.find_element(By.ID,'accept-from-input').click()
sleep(1)
#点击省直辖市
driver.find_element(By.XPATH,'(//li[@class="tab-item cursor-point"])[2]').click()
sleep(1)
ids=[
"广东",
"深圳",
"光明区"
]
for i in ids:
driver.find_element(By.XPATH, f'//ul[@class="card-inner flex"]//li[contains(.,"{i}")]').click()
sleep(1)
# 点击目的地
driver.find_element(By.ID, 'accept-to-input').click()
driver.find_element(By.XPATH, '(//li[@class="tab-item cursor-point"])[2]').click()
sleep(1)
ids = [
"江苏",
"南京",
"鼓楼"
]
for i in ids:
driver.find_element(By.XPATH, f'//ul[@class="card-inner flex"]//li[contains(.,"{i}")]').click()
sleep(1)
sleep(1)
#输入托运物品
driver.find_element(By.ID,'accept-consignment-input').find_element(By.TAG_NAME,'input').send_keys(name)
sleep(1)
#选择对应的物品
driver.find_element(By.XPATH,f'//div[@class="input goods-name"]//li//div[text()="{actives}"]').click()
sleep(1)
#点击查询
driver.find_element(By.CLASS_NAME,'search-btn').click()
sleep(2)
self.take_screenshot(driver,file)
def test_SF_009(self,driver):
# 打开服务支持
driver.find_element(By.LINK_TEXT, "服务支持").click()
sleep(1)
# 收寄标准
driver.find_element(By.XPATH, '(//ul[@class="side-child expand"]//li)[3]').click()
sleep(1)
# 点击出发地
driver.find_element(By.ID, 'accept-from-input').click()
sleep(1)
ids = [
"深圳",
"南山",
]
for i in ids:
driver.find_element(By.XPATH, f'//ul[@class="card-inner flex"]//li[contains(.,"{i}")]').click()
sleep(1)
# 点击目的地
driver.find_element(By.ID, 'accept-to-input').click()
sleep(1)
# 点击港澳台
driver.find_element(By.XPATH, '(//li[@class="tab-item cursor-point"])').click()
sleep(1)
ids = [
"香港",
"湾仔区",
"铜锣湾"
]
for i in ids:
driver.find_element(By.XPATH, f'//ul[@class="card-inner flex"]//li[contains(.,"{i}")]').click()
sleep(1)
#点击寄件人身份
btn=driver.find_elements(By.CLASS_NAME,'wrap')
input_btn=driver.find_elements(By.CLASS_NAME,'select-id')
input_btn[0].click()
sleep(1)
btn[1].find_element(By.CLASS_NAME,'options').find_elements(By.TAG_NAME,'div')[0].click()
sleep(1)
input_btn[1].click()
sleep(1)
btn[2].find_element(By.CLASS_NAME,'options').find_elements(By.TAG_NAME,'div')[1].click()
ids={
"猫咪",
"硫酸",
"现金",
"古董"
}
count=1
# 输入托运物品
for i in ids:
inputs=driver.find_element(By.ID, 'accept-consignment-input').find_element(By.TAG_NAME, 'input')
inputs.clear()
inputs.send_keys(i)
sleep(1)
driver.find_element(By.CLASS_NAME,'search-btn').click()
sleep(2)
self.take_screenshot(driver,f"SF_009_00{count}.png")
count+=1
@pytest.mark.parametrize(
("start,city,file"),[
("广东省","","SF_010_001.png"),
("广东省","大石街道","SF_010_002.png"),
("新疆维吾尔自治区","","SF_010_003.png"),
("新疆维吾尔自治区", "米夏乡", "SF_010_004.png"),
]
)
def test_SF_010(self,driver,start,city,file):
# 打开服务支持
driver.find_element(By.LINK_TEXT, "服务支持").click()
sleep(1)
# 服务范围
driver.find_element(By.XPATH, '(//ul[@class="side-child expand"]//li)[4]').click()
sleep(1)
driver.find_element(By.ID,'range-query-citypicker').click()
sleep(1)
driver.find_element(By.CLASS_NAME,'city-search').send_keys(start)
sleep(1)
if start=="广东省":
driver.find_element(By.XPATH,'//div[@class="search-result"]//li[contains(.,"番禺区")]').click()
if start=="新疆维吾尔自治区":
driver.find_element(By.XPATH, '//div[@class="search-result"]//li[contains(.,"伽师县")]').click()
sleep(1)
if city is not "":
driver.find_element(By.XPATH,"//div[@class='input fourth-level']").click()
sleep(1)
driver.find_element(By.XPATH,f'//div[@class="fourth-level-box"]//li[text()="{city}"]').click()
driver.find_element(By.CLASS_NAME,'search-btn').click()
sleep(2)
self.take_screenshot(driver,file)
# test-code-end
@staticmethod
def take_screenshot(driver, file_name):
timestamp = datetime.now().strftime( "%H%M%S%d%f" )[:-3]
timestamped_file_name = f"{timestamp}_{file_name}"
screenshots_dir = "screenshots"
if not os.path.exists( screenshots_dir ):
os.makedirs( screenshots_dir )
screenshot_file_path = os.path.join( screenshots_dir, timestamped_file_name )
driver.save_screenshot( screenshot_file_path )
20251120105836439.docx
docx文件
20251120105837903.docx
docx文件
20251120105838313.xlsx
xlsx文件
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END














![表情[youhengheng]-七彩云资源网](https://www.qicaiy.cn/wp-content/themes/zibll/img/smilies/youhengheng.gif)
暂无评论内容