1.selenium的工作原理
selenium的工作原理涉及以下主要组件和步骤:
(1)WebDriver:这是selenium的核心组件,它是一个用于控制浏览器的API。WebDriver提供了许多方法,用于在浏览器中模拟用户操作。不同的浏览器需要相应的WebDriver实现。
(2)浏览器驱动程序:每个浏览器需要一个特定的驱动程序,用于与WebDriver通信。例如,Chrome浏览器需要Chorme Driver,Firefox 浏览器需要Gecko Driver等。
(3)浏览器的实例化:在测试开始前,需要实例化一个特定浏览器的webdriver对象,这个webDriver对象可以控制一个真实的浏览器实例。
(4)模拟用户操作:通过webdriver对象,你可以执行一系列模拟用户操作,如点击按钮、输入文本、提交表单、导航到不同页面等。
(5)等待和定位元素:在自动化测试中,等待是一个重要的概念,你要等待页面加载完成、元素可见、元素存在等条件满足后再执行操作。同时,你需要定位要操作的html元素,比如按钮、输入框等。这可以通过各种定位策略如ID、类名、CSS选择器、xpath等来实现。
(6)断言和验证:在自动化测试中,你通常会使用断言来验证预期结果是否与实际结果一致,这可帮助你确认web应用程序的行为是否符合预期。
(7)测试框架集成:selenium可以与不同的测试框架(如junit,testNG,pytest等)集成,以实现更结构化和可管理的测试。
2.selenium实现12306网站自动购票
from selenium import webdriver
import time
import json
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
def login():
driver.get('https://kyfw.12306.cn/otn/resources/login.html')
#最大化窗口
driver.maximize_window()
#获取扫码登录cookies保存至本地,然后再从txt文件中读取保存到本地的cookie进行登录。该方法可能会在网站升级反爬操作后失效。
driver.find_element(By.XPATH,'//*[@id="J-userName"]').send_keys('13709290316')
driver.find_element(By.XPATH,'//*[@id="J-password"]').send_keys('428099ab')
driver.find_element(By.XPATH,'//*[@id="J-login"]').click()
#切换到弹出窗口
driver.implicitly_wait(20)
time.sleep(10)
login_btn_loc=driver.find_element(By.XPATH,'//*[@id="modal"]/div[2]')
driver.find_element(By.XPATH,'//*[@id="id_card"]').send_keys('0826')
driver.find_element(By.XPATH,'//*[@id="verification_code"]').click()
#手动输入验证码
time.sleep(30)
driver.find_element(By.XPATH,'//*[@id="sureClick"]').click()
# print("用户登录")
time.sleep(2)
# 登录完成后就会跳转新窗口
n = driver.window_handles
print('当前句柄', n)
driver.switch_to.window(n[-1]) # driver切换至最新生产的页面
# '''1.cookie是用于保存用户的类似账号密码等个人信息并存储在浏览器中,是一种数字形式的访问凭证。
# 2.cookie有很多类型,因此在使用cookie时要先判定其数据类型'''
cookie = driver.get_cookies()
# print(cookie)
# 获取list的cookies
jsonCookies = json.dumps(cookie)
# 转换成字符串保存
with open('ticket_cookies.txt', 'w')as f:f.write(jsonCookies)
# print('cookies保存成功!')
def buy():
# 将鼠标悬停在车票页签上
ele=driver.find_element(By.XPATH,'//*[@id="J-chepiao"]/a').click()
#在driver浏览器上面,创建selenium的鼠标类操作对象
# action=ActionChains(driver)
# 把鼠标移动到元素上
#action.move_to_element(ele)
driver.implicitly_wait(15)
#点击买票
driver.find_element(By.XPATH,'//*[@id="megamenu-3"]/div[1]/ul/li[1]/a').click()
driver.implicitly_wait(15)
n = driver.window_handles
print('当前句柄', n)
driver.switch_to.window(n[-1]) # driver切换至最新生产的页面
time.sleep(3)
# 选择出发地
driver.find_element(By.XPATH,'//*[@id="fromStationText"]').click()
driver.find_element(By.XPATH,'//*[@id="ul_list1"]/li[29]').click()
# 选择到达地
driver.find_element(By.XPATH,'//*[@id="toStationText"]').click()
driver.find_element(By.XPATH,'//*[@id="ul_list1"]/li[2]').click()
# 选择日期,先清空文本框的值
driver.find_element(By.XPATH,'//*[@id="train_date"]').clear()
driver.find_element(By.XPATH,'//*[@id="train_date"]').send_keys('2023-08-09')
driver.find_element(By.XPATH,'//*[@id="query_ticket"]').click()
driver.implicitly_wait(15)
driver.find_element(By.XPATH,'//*[@id="ticket_8d000G318206_08_23"]/td[13]/a').click()
#创建程序入口
if __name__=='__main__':
driver = webdriver.Chrome()
login()
time.sleep(2)
buy()
3.开源库管理
在python项目的project目录下放置一个requirements.txt文件,在terminal中运行命令:
pip install -r requirements.txt
就会自动安装文件中所有需要的库。
# This is a mirror image of Tsinghua University
# -i https://pypi.tuna.tsinghua.edu.cn/simple
# This is the specified version
# selenium==4.8.2
selenium
pytest
版权归原作者 芷月_wyy 所有, 如有侵权,请联系我们删除。