处理下拉列表
《Python实现Web UI自动化测试实战:Selenium 3/4+unittest/pytest+gitlab+jenkins》读书笔记
导包:
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.select import Select
操作步骤
- 实例化 Select
Select(driver.find_element())
- 选择下拉框选项
select_by_index(index)
select_by_value(value)
:通过value值选项下拉选项
select_by_visible_text(text)
: 通过可见text选择下拉选项 - 取消下拉框选项
deselect_by_index(index)
deselect_by_value(value)
deselect_by_visible_text(text)
deselect_all()
- 返回选项
optioins
: 返回所有选项
first_selected_option
: 返回第一个选中项
all_selected_options
: 返回所有选中项 - 判断select选项是否可以多选
is_multiple
1 = Select(driver.find_element_by_id('s1Id')) # 实例化Select
sleep(2)
s1.select_by_index(1) # 通过index选择第二个选项:o1
sleep(2)
s1.select_by_value("o2") # 通过value值选择value="o2"的选项
sleep(2)
s1.select_by_visible_text("o3") # 通过可见text选择text="o3"的值,即在打开下拉列表时我们可以看到的文本
手动实现全选下拉框
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from time import sleep
import os
driver = webdriver.Chrome()
# driver = webdriver.Firefox()
html_file = 'File:///' + os.getcwd() + os.sep + 'myhtml6_3.html'
driver.get(html_file)
s1 = Select(driver.find_element_by_id('s1Id')) # 实例化Select
sleep(2)
all_options = s1.options
for i in range(0,len(all_options)): # 通过len方法获得选项数量,通过range方法将其变为一个整数列表
s1.select_by_index(i)
sleep(2)
driver.quit()
$ 当我们用select_by_visible_text选择时需要注意以下3点。
- 当text以空格开头时,定位的传入值可以输入多个空格,也可以不加空格。
- 当text中间有空格时,只加一个空格。
- 当text中有nbsp时,根据nbsp的数量加空格。
input下拉列表
使用键盘模拟操作
driver.find_element_by_id('select').send_keys('b')
sleep(3)
driver.find_element_by_id('select').send_keys(Keys.ARROW_DOWN)
sleep(3)
driver.find_element_by_id('select').send_keys(Keys.ENTER)
操作表格
cell_text = driver.find_element(By.ID, "CellWithId").text
print(cell_text)
# 输出表中的所有内容
tbody = driver.find_element(By.XPATH, "/html/body/table/tbody")
# 找出表格下有多少个tr
tr_list = tbody.find_elements(By.TAG_NAME, "tr")
print(len(tr_list), tr_list)
# 输出表格中的内容
for tr in range(0, len(tr_list)):
td_list = tr_list[tr].find_elements(By.TAG_NAME, "td")
for td in range(0, len(td_list)):
print(td_list[td].text)
sleep(3)
driver.quit()
ifram切换
通过id切换driver.switch_to.frame("ifrma1")
通过name(也是唯一)切换driver.switch_to.frame("name1")
通过index切换driver.switch_to.frame(0)
通过定位元素切换driver.switch_to.frame(iframe_element)
切回上一级driver.switch_to.parent_frame()
直接切回主页面driver.switch_to.default_content()
操作弹窗
JavaScript弹窗
弹窗分类
- Alert弹窗:文字信息 + 确定按钮
- Confirm弹窗:文字信息 + 确定按钮 + 取消按钮
- Prompt弹窗:文字信息 + 文本框 + 确定按钮 + 取消按钮
操作
操作Alert弹窗
driver.switch_to.alert.text # 输出Alert弹窗文字
driver.switch_to.alert.accept() # 单击Alert弹窗中的 确定 按钮
操作Confirm弹窗
driver.switch_to.alert.text # 输出Confirm弹窗文字
driver.switch_to.alert.accept() # 单击Confirm弹窗中的 确定 按钮
driver.switch_to.alert.dismiss() # 单击Confirm弹窗中的 取消 按钮
操作Prompt弹窗
driver.switch_to.alert.text # 输出Prompt弹窗文字
driver.switch_to.alert.accept() # 单击Prompt弹窗中的 确定 按钮
driver.switch_to.alert.dismiss() # 单击Prompt弹窗中的 取消 按钮
driver.switch_to.alert.send_keys(xx) # Prompt弹窗中输入文字
非JavaScript弹窗
- Windows浏览器弹窗
- 切换句柄操作就可以
- div弹窗
- 直接根据定位操作就可以
下载文件
默认情况下,浏览器下载的文件会在chrome浏览器设置的路径中,可以进行修改
指定浏览器的下载路径参数
Chrome下载文件
from selenium import webdriver
from time import sleep
import os
chromeOptions = webdriver.ChromeOptions() # 定义变量,存储Chrome浏览器的设置项
prefs = {
"download.default_directory": "D:\\A\\"} # 指定默认下载路径
chromeOptions.add_experimental_option("prefs", prefs) # 将prefs定义的下载路径应用于浏览器设置
driver = webdriver.Chrome(chrome_options=chromeOptions) # 以自定义的设置项启动浏览器
html_file = 'File:///' + os.getcwd() + os.sep + 'myhtml6_13.html'
driver.get(html_file)
sleep(2)
driver.find_element_by_tag_name('a').click()
sleep(5)
driver.quit()
FireFox下载文件
from selenium import webdriver
from time import sleep
'''
browser.download.dir:指定下载路径
browser.download.folderList:设置成2表示使用自定义下载路径,设置成0表示下载到桌面,设置成1表示下载到默认路径
browser.download.manager.showWhenStarting:在开始下载时是否显示下载管理器
browser.helperApps.neverAsk.saveToDisk:对所给出的文件类型不再出现弹窗进行询问
'''
profile = webdriver.FirefoxProfile()
profile.set_preference('browser.download.dir', 'd:\\')
profile.set_preference('browser.download.folderList', 2)
profile.set_preference('browser.download.manager.showWhenStarting', False)
profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/zip')
driver = webdriver.Firefox(firefox_profile=profile)
driver.get('http://sahitest.com/demo/saveAs.htm')
driver.find_element_by_xpath('//a[text()="testsaveas.zip"]').click()
sleep(3)
driver.quit()
判断下载的文件和目标文件是否一致 -> 使用md5
这种情况只适用于,文件不变的情况
from selenium import webdriver
from time