Selenium相关API
1.selenium原理
之后叙述!
2.Webdriver常用API介绍
2.1元素的定位
driver = webdriver.Chrome()
url = "http://www.baidu.com"
driver.get(url)
# 用id来定位(全局唯一)
# driver.find_element_by_id("kw").send_keys("鹿晗")
# driver.find_element_by_id("su").click()
# 用class_name来定位(不一定唯一)
# driver.find_elements_by_class_name("s_ipt nobg_s_fm_hover").send_keys("鹿晗")
# driver.find_elements_by_class_name("btn self_btn bg s_btn btn_h btnhover").click()
# 用link_text来定位
# driver.find_element_by_link_text("新闻").click()
# 用partial_link_text
# driver.find_element_by_partial_link_text("123").click()
# 用tag_name 定位
# driver.find_element_by_tag_name("input").send_keys("鹿晗")
# driver.find_element_by_tag_name("input").click()
# 用css_selector
# driver.find_element_by_css_selector("#kw").send_keys("追风筝的人")
# driver.find_element_by_css_selector("#su").click()
# 用xpath定位(肯定可以唯一定位)
# driver.find_element_by_xpath("//*[@id='kw']").send_keys("海棠依旧")
# driver.find_element_by_xpath("//*[@id='su']").click()
# driver.quit()
2.2操作测试对象
click 用于点击一个按钮
send-keys 用于在一个输入框里输入内容
# 清除输入框的内容
# driver.find_element_by_css_selector("#kw").clear()
# driver.find_element_by_css_selector("#kw").send_keys("杨紫")
# 提交表单
# driver.find_element_by_id("su").submit()
# text获取文本内容
# text = driver.find_element_by_id("s-top-left").text
2.3添加等待
# 固定等待
# time.sleep(10)
# 智能等待
# driver.implicitly_wait(10)
2.4打印信息
#打印url和title
# title = driver.title
# url = driver.current_url
# print(title)
# print(url)
2.5浏览器的操作
# 将浏览器最大化显示
# driver.maximize_window()
# 设置浏览器宽480、高800显示
# driver.set_window_size(480, 800)
# 前进、
# driver.forward()
# 浏览器的后退
# driver.back()
# 将滚动条移动到页面的顶部
# js2 = "var q=document.documentElement.scrollTop=0"
# driver.execute_script(js2)
# 控制浏览器滚动条:将页面滚动条拖到底部(下拉)
# js1 = "var q=document.documentElement.scrollTop=10000"
# driver.execute_script(js1)
2.6键盘事件
要想调用键盘按键操作需要引入keys 包:
from selenium.webdriver.common.keys import Keys
通过send_keys()调用按键:
send_keys(Keys.TAB) # TAB
send_keys(Keys.ENTER) # 回车
# 键盘按键
driver.find_element_by_id("account").send_keys("admin")
time.sleep(3)
# 模拟tab键
driver.find_element_by_id("account").send_keys(Keys.TAB)
time.sleep(6)
# driver.find_element_by_name("password").send_keys("y123456!")
# enter登录
# driver.find_element_by_name("password").send_keys(Keys.ENTER)
# driver.find_element_by_id("submit").click()
# 键盘组合键
kw.send_keys(Keys.CONTROL, 'a')
kw.send_keys(Keys.CONTROL, 'x')
2.7鼠标事件
# 右击
ActionChains(driver).context_click(su).perform()
time.sleep(3)
# 双击
ActionChains(driver).double_click().perform()
time.sleep(6)
context_click() 右击
double_click() 双击
drag_and_drop() 拖动
move_to_element() 移动
2.8定位一组元素
webdriver 可以很方便的使用findElement 方法来定位某个特定的对象,不过有时候我们却需要定位一组对象,这时候就需要使用findElements 方法.
定位一组对象一般用于以下场景:
批量操作对象,比如将页面上所有的checkbox 都勾上
先获取一组对象,再在这组对象中过滤出需要具体定位的一些对象。比如定位出页面上所有的checkbox,然后选择最后一个
# 1.
# driver.find_element_by_id("c1").click()
# driver.find_element_by_id("c2").click()
# driver.find_element_by_id("c3").click()
# inputs = driver.find_elements_by_tag_name("input")
#2.定位一组元素
# for input in inputs:
# if input.get_attribute('type') =='checkbox':
# input.click()
2.9多层框架/窗口定位
switch_to_frame() 把当前定位的主体切换了frame里
switch_to_window()
switch_to_default_content:从frame中嵌入的页面里跳出,跳回到最外面的原始页面中
# 转换层级
# driver.switch_to.frame("f1")
# driver.switch_to.frame("f2")
# 回到默认页面
# driver.switch_to.default_content()
# driver.switch_to.frame("f1")
2.10层级定位
# 定位下拉列表的特定元素
# ele = driver.find_element_by_id("dropdown1").find_element_by_link_text("Another action")
2.11下拉框处理
下拉框里的内容需要进行两次定位,先定位到下拉框,再定位到下拉框内里的选项
# 下拉框处理xpath css_selector 一组元素 数组
# driver.find_element_by_xpath("//*[@id='ShippingMethod']/option[3]").click()
# driver.find_element_by_css_selector("#ShippingMethod > option:nth-child(3)").click()
# options = driver.find_element_by_id("ShippingMethod").find_elements_by_tag_name("option")
# for option in options:
# if option.get_attribute('value') == '10.69':
# option.click()
# options[2].click()
2.12 alert/confirm/prompt
text 返回alert/confirm/prompt 中的文字信息
accept 点击确认按钮
dismiss 点击取消按钮,如果有的话
send_keys 输入值,这个alert\confirm 没有对话框就不能用了,不然会报错
switch_to_alert()只能处理原生的alert
# alert
# driver.find_element_by_tag_name("input").click()
# time.sleep(3)
# alert = driver.switch_to.alert
# alert.send_keys("java00")
# alert.accept()
# 关闭弹框
# time.sleep(3)
# 得到弹框的操作句柄
# alert = driver.switch_to.alert
# alert.accept()
2.13DIV对话框处理
# div对话框
# div0 = driver.find_element_by_class_name("modal-body")
# div0.find_element_by_id("click").click()
# div1 = driver.find_element_by_class_name("modal-footer")
# div1.find_element_by_class_name("btn").click()
# 关闭对话框
# buttons = div1.find_elements_by_tag_name("button")
# buttons[0].click()
2.14上传文件操作
# 上传文件
driver.find_element_by_tag_name('input').send_keys("F:\\s1.png")
# driver.find_element_by_link_text("Click").click()