一:八大元素定位,主要讲比较常用到的几种
id 实例: driver.find_element_by_id("username").click class 实例:driver.find_element_by_class_name("username").click 注意:多个元素共用一个class,如果像列表内有多个按钮这种,需要操作某个按钮。可以先获取class内的所有元素,然后进行下标的方式去操作某个元素。如果需要都点击一遍,可以把返回值做一个循环操作。 name 实例:driver.find_element_by_id("username").click xpath(万能,重点)实例: driver.find_element_by_xpath("/html/body/div/ul[2]/li[1]").click css(万能,重点)实例: driver.find_element_by_css_selector("body > div > ul > li:nth-child(2)").click
二:浏览器的操作
最大化,最小化 driver.maximize_window() # 最大化浏览器
driver.minimize_window() # 最小化浏览器
获取标签页的title、url driver.title #获取当前标签页的title driver.current_url #获取当前标签页的url driver.name # 获取当前浏览器的名称 浏览器前进、后退、刷新 driver.forward() # 前进
driver.back() # 后退
driver.refresh() # 刷新
打开、关闭新标签页 # 获取当前标签页句柄 driver.current_window_handle
# 获取浏览器所有标签页句柄 handles = driver.window_handles
# 切换标签页 driver.switch_to.window(handles[-1])
# 关闭当前标签页 driver.close()
三:元素常见操作
元素是否可点击 # 找到 可点击元素 ant_btn3 = driver.find_element_by_class_name("ant-btn1") ant_btn3.is_enabled()某个元素若有 disabled 属性则是不可点击,否则就是可点击
元素是否已被选中 # 找到 未被选中的元素 option1 = driver.find_elements_by_tag_name("option")[0] option1.is_selected()某个元素若有 selected 属性则是已被选择
表单提交 # 找到搜索框 search_text = driver.find_element_by_id('kw').send_keys('JC')
# 提交表单 search_text.submit()
submit() 方法用于提交表单。 实际场景: 在搜索框输入关键字之后的“回车” 操作, 就可以通过该方法模拟
四:鼠标操作
鼠标左键、右键单击、双击,或者通过 js 实现 from selenium.webdriver import ActionChains # 创建实例 chains = ActionChains(driver) # 登录按钮 username = driver.find_element_by_id("username") password = driver.find_element_by_id("password")
# 左键点击 chains.click(username).perform()
# 右键点击 chains.context_click(username).perform()
# 双击 chains.double_click(password).perform()
鼠标悬停 # 悬停到设置按钮 chains.move_to_element(login_btn).perform()
调用execute_script(),通过js实现 # 有时元素定位到,但点击无效,用该方法可以。。。 driver.execute_script("arguments[0].click();", username ) 五:键盘操作
# 输入搜索内容 inputElement.send_keys("小菠萝测试笔记")
# ctrl+a全选 inputElement.send_keys(Keys.CONTROL, "a")
# ctrl+c 复制输入框内容 inputElement.send_keys(Keys.CONTROL, 'c')
# ctrl+x 剪切输入框内容 inputElement.send_keys(Keys.CONTROL, 'x')
# ctrl+x 剪切输入框内容 inputElement.send_keys(Keys.CONTROL, 'x')
# ctrl+v 粘贴输入框内容
inputElement.send_keys(Keys.CONTROL, 'v')
# 空格键
inputElement.send_keys(Keys.SPACE)
# 后退键
inputElement.send_keys(Keys.BACKSPACE)
# tab键
inputElement.send_keys(Keys.TAB)
# 回车键
inputElement.send_keys(Keys.ENTER)
# 刷新页面
inputElement.send_keys(Keys.F5)
如果定位不到元素,如上传弹窗。可以使用以下两个库直接操作鼠标和键盘 pymouse(鼠标对象), pykeyboard(键盘对象) 六:显示等待、隐性等待、强制等待
&npse;driver = webdriver.Chrome(“…/resources/chromedriver.exe”)
# 访问网址 driver.get(“http://www.baidu.com”)
# =显式等待 =
# 设置元素等待实例,最多等10秒,每0.5秒查看条件是否成立 element = WebDriverWait(driver, 10, 0.5).until( # 条件:直到元素加载完成 EC.presence_of_element_located((By.ID, “kw”)) )
隐性等待(可设置成全局变量,对webdriver 生命周期影响) 隐性等待体现:如果在规定时间内,整个网页都加载完成,则执行下一步,否则会抛出异常 调用方法: # ===隐性等待20s=== driver.implicitly_wait(20) 缺点:在规定的时间内,页面加载完成(标签页小圈不再转)才能执行下一步,但有可能页面未加载完成,但元素已加载完成受制于某些js和图片原因,必须要等到全部加载完才能下一步,增加了不必要的加载时间。
七:切换ifarme 与 屏幕截图
切换回主页面: driver.switch_to.default_content()
# 截取整个页面,最好保存为png 格式: driver.get_screenshot_as_file("E:\\test.png") # 保存在绝对路径下 driver.save_screenshot("tests.png") # 保存在相对路径下
八:alert窗口处理(警告框、确认框、对话框)
div弹窗(可能是弹窗,带有蒙层)
1
2
#切换到弹窗
alert = driver.switch_to.alert
警告提示框(必须先关闭,用户才能操作。会提示有确认按钮)
# 警告框
alert1 = driver.find_element_by_id("bu1")
# 先点击,得先弹出警告框
alert1.click()
# 切换至警告框
alert1 = driver.switch_to.alert
# 点击 确定
alert1.accept()
确认消息框(跟警告框类似,多了取消按钮)
alert2 = driver.find_element_by_id("bu2")
alert2.click()
# 切换至对话框
alert2_ = driver.switch_to.alert
# 点击 取消
alert2_.dismiss()
# 点击 确认
# alert2_.accept()
对话框(需要定位文本按钮。进入文本框内进行输入,然后确认响应)
alert3 = driver.find_element_by_id("bu3")
alert3.click()
# 切换至对话框
alert3_ = driver.switch_to.alert
# 输入值到对话框中
alert3_.send_keys("输入对话框")
# 点击 确认
alert2_.accept()
# 点击取消按钮
alert_element.dismiss()
十:Select下拉框的操作
返回选项&选中操作
from selenium.webdriver.support.select import Select
# 找到select标签元素
pro = Select(driver.find_element_by_id("pro"))
# 返回所有选项
for option in pro.options:
print(option.text)
# 返回所有被选中的选项
for option in pro.all_selected_options:
print(option.text)
# 通过value选中
pro.select_by_value("bj")
# 通过index选中 pro.select_by_index(1) # 通过标签文本选中 pro.select_by_visible_text(“广东”)
取消选中操作
# 找到id=city的下拉框
city = Select(driver.find_element_by_id("city"))
# 全选
for option in city.options:
if not option.is_selected():
city.select_by_visible_text(option.text)
# 根据value取消选中
city.deselect_by_value("bj")
# 根据index取消选中
city.deselect_by_index(0)
# 根据标签文本选中
city.deselect_by_visible_text("武汉")
# 全选
for option in city.options:
if not option.is_selected():
city.select_by_visible_text(option.text)
# 取消选中所有选项
city.deselect_all()
十一:上传文件的方式
input标签 方式:直接元素定位输入路径上传即可 非jinput标签:1、可以使用win32gui 方式定位到上传的弹窗;2、使用SendKeys 直接向焦点内输入,键盘回车等操作。
十二:判断元素是否存在DOM树? 方式一:find_element + try- except
如返回False 则 不存在,返回webelement 元素则存在
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
element = WebDriverWait(driver, 30, 1).until( EC.presence_of_element_located(locator) )
十三:js定位与jquery定位
js定位五种
1
2
3
4
5
基本语法:<br>document.getElementById()
document.getElementsByName()
document.getElementsByTagName()
document.getElementsByClassName()
document.querySelectorAll()
jquery定位