
使用编写代码的工具可以使用pycharm也可以使用vscode 根据自己的情况选择
下载地址是:https://www.jetbrains.com/zh-cn/pycharm/download/?section=windows
2.安装
C:\Users\administrator\AppData\Local\Programs\Python\Python3.8)
安装之后找到python.exe所在目录 复制路径粘贴到我的电脑-高级系统设置-环境变量-path-编辑-新建-粘贴进去-保存
验证:win+R——cmd命令——输入python --version 查看到python版本则配置完毕
Win+R ——cmd——输入pip install selenium
安装完毕可以通过pip show selenium查询selenium的版本
清华源镜像安装:pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple
Win+R——cmd——输入pip install pytest
查询pytest : pytest –version
3.关闭chrome浏览器自动更新
电脑win+R输入services.msc

将更新服务停止并禁用
4.验证环境是否完成
讲chrom驱动与该脚本放置同一文件夹中,使用pytest运行该pyton脚本
import os
from datetime import datetime
import pytest
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
@pytest.fixture(scope="function")
def driver():
service = Service(
#这里填写浏览器驱动存放路径,可以写相对脚本的路径也可以写绝对路径
executable_path="chromedriver.exe")
driver = webdriver.Chrome(service=service)
driver.get("https://www.iarc.top/ ")
driver.maximize_window()
yield driver
driver.quit()
class Test:
def test_take_screenshot(self,driver):
self.take_screenshot(driver,"测试截屏.png")
@staticmethod
def take_screenshot(driver, file_name):
timestamp = datetime.now().strftime("%H%M%S%d%f")
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)若正常运行并截屏,则证明环境已经配置好了,接下来可以开始根据需求写测试代码了
本次测试使用的selenium代码如下:
#定位元素
yuansu = driver.find_element(By.CSS_SELECTOR, "#yuansu")
#点击元素
yuansu.click()
#等待8秒
time.sleep(8)
#鼠标悬浮
ActionChains(driver).move_to_element(yuansu).perform()
#拖动元素
ActionChains(driver).click_and_hold(yuansu).move_by_offset(移动距离, 0).release().perform()只需记住上面这几个代码,这场测试分数就能达到:

这是慕测的一个赛题;
本文档旨在定义百度地图网站的功能测试需求,确保网站的各项功能按照需求说明正确实现。主要需要验证百度地图的公交线路查询模块、路况信息模块和地铁线路图模块功能正确性。比赛选手应根据功能说明书中所描述的软件操作方法,以及本文档所描述的测试需求设计测试用例,并编写对应的自动化测试代码。
验证用户能否根据功能说明书中所描述的方式进行公交线路的查询和操作
验证用户能否根据功能说明书中所描述的方式进行路况信息的查看和操作
验证用户能否根据功能说明书中所描述的方式进行地铁线路图的查看和操作
百度地图首页:https://map.baidu.com
初始代码:
import os
from datetime import datetime
import pytest
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
@pytest.fixture( scope="function" )
def driver():
service = Service(
executable_path="chromedriver.exe" )
driver = webdriver.Chrome( service=service )
driver.get( "https://map.baidu.com/ " )
driver.maximize_window()
driver.implicitly_wait( 10 )
yield driver
driver.quit()
class TestBaiDuMap:
# test-code-start
# 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 )
- 需求1(R001):用户访问百度地图首页,点击【路线】按钮

,然后点击左上角的【公交】

选项以进入公交查询窗口。在【输入起点或在图区上选点】输入框中输入起点,在【输入终点】输入框中输入终点。点击【搜索】按钮进行查询,系统应正确显示推荐路线,并截图查询结果。(共4条用例)
输入数据要求:
-起点:仅考虑以下2个地点(南京大学(鼓楼校区)、东南大学(四牌楼校区))
-终点:仅考虑以下2个地点(新街口商业步行区、先锋书店(五台山店))
由于四个用例只有三个变量,所以直接使用parametrize简化代码量,cfd代表出发地,mdd代表目的地,jp代表截屏名称
然后记得在def定义的函数中讲cfd,mdd,jp这三个变量引入,否则无法正常调用
元素定位直接鼠标右键或F12打开控制台在元素里面定位,复制selector即可
需求1的代码:
@pytest.mark.parametrize( "cfd,mdd,jp", [
( "南京大学(鼓楼校区)", "新街口商业步行区","BaiDuMap_R001_001.png" ),
( "南京大学(鼓楼校区)", "先锋书店(五台山店)","BaiDuMap_R001_002.png" ),
( "东南大学(四牌楼校区)", "新街口商业步行区","BaiDuMap_R001_003.png" ),
( "东南大学(四牌楼校区)", "先锋书店(五台山店)","BaiDuMap_R001_004.png" )
] )
def test_BaiDuMap_R001(self, driver, cfd, mdd, jp):
from selenium.webdriver.common.by import By
import time
time.sleep(5)
luxian = driver.find_element(By.CSS_SELECTOR, "#sole-searchbox-content > div.searchbox-content-button.right-button.route-button.loading-button")
luxian.click()
time.sleep(2) # 暂停2秒
gongjiao = driver.find_element(By.CSS_SELECTOR, "#route-searchbox-content > div.route-header > div.searchbox-content-common.route-tabs > div.tab-item.bus-tab")
gongjiao.click()
time.sleep(2) # 暂停2秒
start_input = driver.find_element(By.CSS_SELECTOR, "#route-searchbox-content > div.routebox > div > div.routebox-inputs > div.routebox-input.route-start > input")
start_input.click()
start_input.send_keys(cfd)
time.sleep(2) # 暂停2秒
end_input = driver.find_element(By.CSS_SELECTOR, "#route-searchbox-content > div.routebox > div > div.routebox-inputs > div.routebox-input.route-end > input")
end_input.click()
end_input.send_keys(mdd)
time.sleep(2) # 暂停2秒
search_button = driver.find_element(By.CSS_SELECTOR, "#search-button")
search_button.click()
time.sleep(8) # 暂停8秒
self.take_screenshot(driver, jp)- 需求2(R002):用户访问百度地图首页,点击【路线】按钮

,然后点击左上角的【公交】

选项以进入公交查询窗口。在【输入起点或在图区上选点】的输入框中输入起点,在【输入终点】的输入框中输入终点。用户点击搜索按钮进行查询,并依次点击切换【推荐路线】

、【时间短】

、【少换乘】

和【少步行】

按钮,系统应正确显示相应的查询结果。需要验证切换功能是否运作正常以及查询结果的准确性。注:每次切换后,都需要对查询结果进行截图。(共4条用例)
输入数据要求:起点为南京大学(鼓楼校区),终点为南京大学(仙林校区)
需求2代码:
def test_BaiDuMap_R002(self, driver):
from selenium.webdriver.common.by import By
import time
time.sleep(5)
luxian = driver.find_element(By.CSS_SELECTOR, "#sole-searchbox-content > div.searchbox-content-button.right-button.route-button.loading-button")
luxian.click()
time.sleep(2)
gongjiao = driver.find_element(By.CSS_SELECTOR, "#route-searchbox-content > div.route-header > div.searchbox-content-common.route-tabs > div.tab-item.bus-tab")
gongjiao.click()
time.sleep(2)
start_input = driver.find_element(By.CSS_SELECTOR, "#route-searchbox-content > div.routebox > div > div.routebox-inputs > div.routebox-input.route-start > input")
start_input.click()
start_input.send_keys("南京大学(鼓楼校区)")
time.sleep(2)
end_input = driver.find_element(By.CSS_SELECTOR, "#route-searchbox-content > div.routebox > div > div.routebox-inputs > div.routebox-input.route-end > input")
end_input.click()
end_input.send_keys("南京大学(仙林校区)")
time.sleep(2)
search_button = driver.find_element(By.CSS_SELECTOR, "#search-button")
search_button.click()
time.sleep(8)
tuijian = driver.find_element(By.CSS_SELECTOR, "#type0")
tuijian.click()
time.sleep(2)
self.take_screenshot(driver, "BaiDuMap_R002_001.png")
shijianduan = driver.find_element(By.CSS_SELECTOR, "#type5")
shijianduan.click()
time.sleep(2)
self.take_screenshot(driver, "BaiDuMap_R002_002.png")
shaohuancheng = driver.find_element(By.CSS_SELECTOR, "#type2")
shaohuancheng.click()
time.sleep(2)
self.take_screenshot(driver, "BaiDuMap_R002_003.png")
shaobuxing = driver.find_element(By.CSS_SELECTOR, "#type3")
shaobuxing.click()
time.sleep(2)
self.take_screenshot(driver, "BaiDuMap_R002_004.png")- 需求3(R003):用户访问百度地图首页,点击【路线】按钮

,选择左上角的【公交】

选项进入公交查询窗口。在输入框中分别输入起点和终点。点击【搜索】按钮进行查询,系统应正确显示相应的查询结果。接下来,将鼠标移动到指定位置

并点击【选为起点】按钮

,随后点击【查看全部线路】

。在展开的公交线路列表中(包括停运线路),选择并点击【48路】。在下方展开的公交线路详情列表中,双击先锋书店(五台山店)右侧的【摄像头图标】

以显示街景,系统应正确显示街景。需要验证摄像头图标功能是否正常运作,以及街景的清晰度。最后,对最终显示结果进行截图。(共1条用例)
输入数据要求:起点为玄武湖景区,终点为先锋书店(五台山店)
需求3代码:
def test_BaiDuMap_R003(self, driver):
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
import time
time.sleep(5)
luxian = driver.find_element(By.CSS_SELECTOR, "#sole-searchbox-content > div.searchbox-content-button.right-button.route-button.loading-button")
luxian.click()
time.sleep(2)
gongjiao = driver.find_element(By.CSS_SELECTOR, "#route-searchbox-content > div.route-header > div.searchbox-content-common.route-tabs > div.tab-item.bus-tab")
gongjiao.click()
time.sleep(2)
start_input = driver.find_element(By.CSS_SELECTOR, "#route-searchbox-content > div.routebox > div > div.routebox-inputs > div.routebox-input.route-start > input")
start_input.click()
start_input.send_keys("玄武湖景区")
time.sleep(2)
end_input = driver.find_element(By.CSS_SELECTOR, "#route-searchbox-content > div.routebox > div > div.routebox-inputs > div.routebox-input.route-end > input")
end_input.click()
end_input.send_keys("先锋书店(五台山店)")
time.sleep(2)
search_button = driver.find_element(By.CSS_SELECTOR, "#search-button")
search_button.click()
time.sleep(8)
xuanweiqidian = driver.find_element(By.CSS_SELECTOR, "#RA_ResItem_0 > table > tbody > tr:nth-child(1) > td:nth-child(3) > div")
ActionChains(driver).move_to_element(xuanweiqidian).perform()
time.sleep(2)
xuanweiqidian.click()
time.sleep(2)
xuanze48 = driver.find_element(By.CSS_SELECTOR, "#scheme_3 > div.route-head > div")
xuanze48.click()
time.sleep(2)
shexiangtou = driver.find_element(By.CSS_SELECTOR, "#route_3 > h3.no2 > div > a")
ActionChains(driver).move_to_element(shexiangtou).perform()
time.sleep(2)
shexiangtouxuanfuhou = driver.find_element(By.CSS_SELECTOR, "body > div.list_street_view_preview > div > div")
shexiangtouxuanfuhou.click()
time.sleep(8)
self.take_screenshot(driver, "BaiDuMap_R003_001.png")- 需求4(R004):用户访问百度地图首页,点击【地点下拉选择】控件

,在展开的城市列表中,选择【南京】。随后点击【路况】

选项。在展开的路况信息页面中,用户应点击【实时路况】

按钮。接着,用户单击【刷新】

按钮,系统应正确更新并显示最新的实时路况信息。完成操作后,用户需对刷新结果进行截图。(共1条用例)
需求4代码:
def test_BaiDuMap_R004(self, driver):
from selenium.webdriver.common.by import By
import time
time.sleep(5)
chengshianniu = driver.find_element(By.CSS_SELECTOR, "#ui3_city_change > a > span")
chengshianniu.click()
time.sleep(2)
anchengshi = driver.find_element(By.CSS_SELECTOR, "#selCityCity")
anchengshi.click()
time.sleep(2)
dianjin = driver.find_element(By.CSS_SELECTOR, "#selCityLetterListId > a:nth-child(13)")
dianjin.click()
time.sleep(2)
nanjing = driver.find_element(By.CSS_SELECTOR, "#selCityPlaceListId > table > tbody > tr:nth-child(25) > td:nth-child(2) > a:nth-child(5)")
nanjing.click()
time.sleep(2)
lukuang = driver.find_element(By.CSS_SELECTOR, "#ui3_control_wrap > div.left.float-l > div.trafficopt > i")
lukuang.click()
time.sleep(2)
shishilukuang = driver.find_element(By.CSS_SELECTOR, "#tarffic_ss")
shishilukuang.click()
time.sleep(2)
gengxin = driver.find_element(By.CSS_SELECTOR, "#bt_trafficCtrl")
gengxin.click()
time.sleep(8)
self.take_screenshot(driver, "BaiDuMap_R004_001.png")- 需求5(R005):用户访问百度地图首页,点击【地点下拉选择】控件

,在展开的城市列表中,选择【南京】。随后点击【路况】

选项,在展开的路况信息页面中,点击【路况预测】

按钮。用户应能够通过点击【星期标签】

来切换查看不同星期的路况信息。系统应正确显示与所选星期标签相对应的路况信息。注意:用户需要点击每个星期标签进行切换,并且每次切换后都需要对查询结果进行截图。(共7条用例)
需求5代码:
def test_BaiDuMap_R005(self, driver):
from selenium.webdriver.common.by import By
import time
time.sleep(5)
chengshianniu = driver.find_element(By.CSS_SELECTOR, "#ui3_city_change > a > span")
chengshianniu.click()
time.sleep(2)
anchengshi = driver.find_element(By.CSS_SELECTOR, "#selCityCity")
anchengshi.click()
time.sleep(2)
dianjin = driver.find_element(By.CSS_SELECTOR, "#selCityLetterListId > a:nth-child(13)")
dianjin.click()
time.sleep(2)
nanjing = driver.find_element(By.CSS_SELECTOR, "#selCityPlaceListId > table > tbody > tr:nth-child(25) > td:nth-child(2) > a:nth-child(5)")
nanjing.click()
time.sleep(2)
lukuang = driver.find_element(By.CSS_SELECTOR, "#ui3_control_wrap > div.left.float-l > div.trafficopt > i")
lukuang.click()
time.sleep(2)
lukuangyuce = driver.find_element(By.CSS_SELECTOR, "#tarffic_yc")
lukuangyuce.click()
time.sleep(2)
yi = driver.find_element(By.CSS_SELECTOR, "#week_trafficCtrl_0")
yi.click()
time.sleep(5)
self.take_screenshot(driver, "BaiDuMap_R005_001.png")
er = driver.find_element(By.CSS_SELECTOR, "#week_trafficCtrl_1")
er.click()
time.sleep(5)
self.take_screenshot(driver, "BaiDuMap_R005_002.png")
san = driver.find_element(By.CSS_SELECTOR, "#week_trafficCtrl_2")
san.click()
time.sleep(5)
self.take_screenshot(driver, "BaiDuMap_R005_003.png")
si = driver.find_element(By.CSS_SELECTOR, "#week_trafficCtrl_3")
si.click()
time.sleep(5)
self.take_screenshot(driver, "BaiDuMap_R005_004.png")
wu = driver.find_element(By.CSS_SELECTOR, "#week_trafficCtrl_4")
wu.click()
time.sleep(5)
self.take_screenshot(driver, "BaiDuMap_R005_005.png")
liu = driver.find_element(By.CSS_SELECTOR, "#week_trafficCtrl_5")
liu.click()
time.sleep(5)
self.take_screenshot(driver, "BaiDuMap_R005_006.png")
ri = driver.find_element(By.CSS_SELECTOR, "#week_trafficCtrl_6")
ri.click()
time.sleep(5)
self.take_screenshot(driver, "BaiDuMap_R005_007.png")- 需求6(R006):用户访问百度地图首页,点击【地点下拉选择】控件

,在展开的城市列表中,选择【南京】。随后点击【路况】

按钮。在展开的路况信息页面中,用户需点击【路况预测】

按钮以进入预测模式。在此模式下,用户应将时间轴拖动至晚上21:00

,系统应准确显示该时间点的路况预测信息。需要验证时间轴操作的流畅性以及预测信息的准确性。完成验证后,用户应截图保存查询结果。(共1条用例)
需求6代码:
def test_BaiDuMap_R006(self, driver):
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
import time
time.sleep(5)
chengshianniu = driver.find_element(By.CSS_SELECTOR, "#ui3_city_change > a > span")
chengshianniu.click()
time.sleep(2)
anchengshi = driver.find_element(By.CSS_SELECTOR, "#selCityCity")
anchengshi.click()
time.sleep(2)
dianjin = driver.find_element(By.CSS_SELECTOR, "#selCityLetterListId > a:nth-child(13)")
dianjin.click()
time.sleep(2)
nanjing = driver.find_element(By.CSS_SELECTOR, "#selCityPlaceListId > table > tbody > tr:nth-child(25) > td:nth-child(2) > a:nth-child(5)")
nanjing.click()
time.sleep(2)
lukuang = driver.find_element(By.CSS_SELECTOR, "#ui3_control_wrap > div.left.float-l > div.trafficopt > i")
lukuang.click()
time.sleep(2)
lukuangyuce = driver.find_element(By.CSS_SELECTOR, "#tarffic_yc")
lukuangyuce.click()
time.sleep(2)
# 找到滑块
slider = driver.find_element(By.CSS_SELECTOR, "#bar_trafficCtrl")
# 获取滑块当前位置
current_position = slider.location['x']
# 获取滑块轨道
slider_track = driver.find_element(By.CSS_SELECTOR, "#forecast_trafficCtrl > tbody > tr:nth-child(2) > td.time_line > div > div.time_line_arrow_cont")
track_start = slider_track.location['x']
track_width = slider_track.size['width']
# 计算目标位置(21:00对应的位置)
target_hour = 21
start_hour = 8
total_hours = 24 - 8
target_position = track_start + (track_width * (target_hour - start_hour) / total_hours)
# 计算需要移动的距离
move_offset = target_position - current_position
# 执行拖动
ActionChains(driver).click_and_hold(slider).move_by_offset(move_offset - 5, 0).release().perform()
time.sleep(5)
self.take_screenshot(driver, "BaiDuMap_R006_001.png")- 需求7(R007):用户访问百度地图首页,点击【地点下拉选择】控件

,在展开的城市列表中,选择【南京】,随后点击【地铁】

按钮以进入地铁线路图页面。在页面中,用户需要在【输入起点】输入框中输入起点站点,在【输入终点】输入框中输入终点站点。输入完成后,用户点击【搜索】按钮进行查询。系统应正确显示出乘车方案以及地铁乘车路线。为了验证查询结果,用户需要对查询结果进行截图。(共4条用例)
输入数据要求:
起点:仅考虑以下2个地点(珠江路、新街口)
终点:仅考虑以下2个地点(南京站、卡子门)
需求7代码:
@pytest.mark.parametrize("cfd,mdd,jp",[("珠江路","南京站","BaiduMap_R007_001.png"),("珠江路","卡子门","BaiduMap_R007_002.png"),("新街口","南京站","BaiduMap_R007_003.png"),("新街口","卡子门","BaiduMap_R007_004.png")])
def test_BaiDuMap_R007(self, driver, cfd, mdd, jp):
from selenium.webdriver.common.by import By
import time
time.sleep(5)
chengshianniu = driver.find_element(By.CSS_SELECTOR, "#ui3_city_change > a > span")
chengshianniu.click()
time.sleep(2)
anchengshi = driver.find_element(By.CSS_SELECTOR, "#selCityCity")
anchengshi.click()
time.sleep(2)
dianjin = driver.find_element(By.CSS_SELECTOR, "#selCityLetterListId > a:nth-child(13)")
dianjin.click()
time.sleep(2)
nanjing = driver.find_element(By.CSS_SELECTOR, "#selCityPlaceListId > table > tbody > tr:nth-child(25) > td:nth-child(2) > a:nth-child(5)")
nanjing.click()
time.sleep(2)
ditie = driver.find_element(By.CSS_SELECTOR, "#ui3_control_wrap > div.left.float-l > div.subwayopt > i")
ditie.click()
qidian = driver.find_element(By.CSS_SELECTOR, "#sub_start_input")
qidian.click()
qidian.send_keys(cfd)
time.sleep(2)
zhongdian = driver.find_element(By.CSS_SELECTOR, "#sub_end_input")
zhongdian.click()
zhongdian.send_keys(mdd)
time.sleep(2)
sousuo = driver.find_element(By.CSS_SELECTOR, "#search-button")
sousuo.click()
time.sleep(8)
self.take_screenshot(driver, jp)- 需求8(R008):用户访问百度地图首页,点击【地点下拉选择】控件

,在展开的城市列表中,选择【南京】,随后点击【地铁】

按钮以进入地铁线路图页面。在页面中,用户应点击【大行宫站】

作为起点,并选择【马群站】

作为终点。完成选择后,用户点击【搜索】按钮。系统应正确显示乘车方案以及地铁乘车路线。在验证过程中,用户需要对查询结果进行截图以确认结果的正确性。(共1条用例)
需求8代码:
def test_BaiDuMap_R008(self, driver):
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
import time
time.sleep(5)
chengshianniu = driver.find_element(By.CSS_SELECTOR, "#ui3_city_change > a > span")
chengshianniu.click()
time.sleep(2)
anchengshi = driver.find_element(By.CSS_SELECTOR, "#selCityCity")
anchengshi.click()
time.sleep(2)
dianjin = driver.find_element(By.CSS_SELECTOR, "#selCityLetterListId > a:nth-child(13)")
dianjin.click()
time.sleep(2)
nanjing = driver.find_element(By.CSS_SELECTOR, "#selCityPlaceListId > table > tbody > tr:nth-child(25) > td:nth-child(2) > a:nth-child(5)")
nanjing.click()
time.sleep(2)
ditie = driver.find_element(By.CSS_SELECTOR, "#ui3_control_wrap > div.left.float-l > div.subwayopt > i")
ditie.click()
daxinggong = driver.find_element(By.CSS_SELECTOR, "#svgjsImage1176")
ActionChains(driver).move_to_element(daxinggong).perform()
time.sleep(1)
daxinggongxuanfu = driver.find_element(By.CSS_SELECTOR, "#svgjsImage1176")
daxinggongxuanfu.click()
time.sleep(2)
maqun = driver.find_element(By.CSS_SELECTOR, "#svgjsImage1155")
ActionChains(driver).move_to_element(maqun).perform()
time.sleep(1)
maqunxuanfu = driver.find_element(By.CSS_SELECTOR, "#svgjsImage1155")
maqunxuanfu.click()
time.sleep(2)
sousuo = driver.find_element(By.CSS_SELECTOR, "#search-button")
sousuo.click()
time.sleep(8)
self.take_screenshot(driver, "BaiDuMap_R008_001.png")码字不易,如果对您有所帮助,麻烦您花1秒钟点个赞👍吧,非常感谢!🙏有什么问题可以在评论区留言哈
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。