1、8种简单对象定位属性:javascript
这8种定位方式在Python selenium中所对应的方法为:css
定位方法:html
webdriver能够很方便的使用findElement方法来定位某个特定的对象,若是须要定位一组对象,这时候就须要使用findElements方法。java
层级定位:web
# coding=utf-8 from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait import time import os dr = webdriver.Chrome() file_path = 'file://' + os.path.abspath('test.html') dr.get(file_path) #点击Link1连接(弹出下拉列表) dr.find_element_by_link_text('Link1').click() #找到id 为dropdown1的父元素 WebDriverWait(dr, 10).until(lambda the_driver: the_driver.find_element_by_id('dropdown1').is_displayed()) #在父亲元件下找到link为Action的子元素 menu = dr.find_element_by_id('dropdown1').find_element_by_link_text('Action') #鼠标定位到子元素上 webdriver.ActionChains(dr).move_to_element(menu).perform() time.sleep(2) dr.quit()
定位思路:chrome
具体思路是:先点击显示出1个下拉菜单,而后再定位到该下拉菜单所在的ul,再定位这个ul下的某个具体的link。在这里,咱们定位第1个下拉菜单中的Action这个选项。浏览器
WebDriverWait(dr, 10) 10秒内每隔500毫秒扫描1次页面变化,当出现指定的元素后结束。框架
is_displayed() 该元素是否用户能够见函数
ActionChains(driver) 生成用户的行为。全部的行动都存储在actionchains对象。经过perform()存储的行为。测试
move_to_element(menu) 移动鼠标到一个元素中,menu上面已经定义了他所指向的哪个元素。
to_element:元件移动到。
perform() 执行全部存储的行为
“下拉列表中Action选项处于被选中状态”,经过鼠标移动到选项上就达到到了这种效果,但经过程序模拟确实比较麻烦
基础操做:
self.driver.implicitly_wait(30) driver.maximize_window() #窗口最大化 #driver.set_window_size(1366, 768) #参数数字为像素点 driver.switch_to_window(driver.window_handles[1]) #此行代码用来定位当前页面 title=driver.title # 获取页面title url = driver.current_url #获取当前页面url. browser.back() browser.forward()
智能等待:
implicitly_wait() 它的用法应该比time.sleep() 更智能,后者只能选择一个固定的时间的等待,前者能够在一个时间范围内智能的等待。
2、简单元素操做:
3、WebElement 接口操做:
4、鼠标操做:双击,鼠标右键,鼠标移动,拖动到元素上等操做:
ActionChains(driver):存储鼠标的操做
perform():对指定的鼠标操做的执行
右击图标:
from selenium.webdriver.common.action_chains import ActionChains imei=driver.find_element_by_css_selector(" ").click() ActionChains(driver).context_click(imei).perform() #鼠标右键 ActionChains(driver).click_and_hold("imei").perform() #鼠标左键 ActionChains(driver).double_clcik("imei").perform() #鼠标双击 ActionChains(driver).move_to_element("imei").perform() #鼠标移动到某个元素上 ActionChains(driver).drag_and_drop(start,end).perform() #鼠标拖动某个元素从start位置到end的位置
5、键盘操做:
键盘的操做基于send_keys()方法
from selenium.webdriver.common.Keys import Keys driver.find_element_by_id("kw").send_keys(KEY.BACK_SPACE) #删除键 driver.find_element_by_id("kw").send_keys(KEY.ENTER) #回车键 driver.find_element_by_id("kw").send_keys(KEY.SPACE) #空格键 driver.find_element_by_id("kw").send_keys(KEY.TAB) #制表符 driver.find_element_by_id("kw").send_keys(KEY.ESCAPE) #退出键 driver.find_element_by_id("kw").send_keys(KEY.CONTROL,'a') #全选 driver.find_element_by_id("kw").send_keys(KEY.CONTROL,'c') #复制 driver.find_element_by_id("kw").send_keys(KEY.CONTROL,'v') #粘贴 driver.find_element_by_id("kw").send_keys(KEY.CONTROL,'x') 剪切
6、下拉框multiple select:
from selenium.webdriver.support.ui import Select # 首先找到须要选择的multiple select元素,实例化一个Select类 select = Select(self.driver.find_element_by_xpath('//*[@id="Root_sourcetype"]')) select.deselect_all() # multiple select元素所有取消选择 select.select_by_index(0) # 选择multiple select元素中第一个选项 select.select_by_value("test") #选择下拉框value为test的选项 select.select_by_visible_text("测试") # 经过选项文字进行选择
7、多层框架定位
有些页面的框架嵌套着另外一个框架,若是须要定位被嵌套的框架里的内容则能够先定位到外部框架,再定位到被嵌套的框架,而后就能够定位里面的页面元素,其实这个思路和定位层级元素是同样的,只是这里用到定位框架的语句须要记下
switch_to_frame(id)
例如:框架A嵌套这框架B,如今须要定位框架B中的文本框
switch_to_frame(id = a) switch_to_frame(id = b) find_element_by_id("textboxid")
定位弹出的框架后操做完成须要跳出框架才能够定位原先页面上的元素。
driver.switch_to_frame("layui-layer-iframe1") #定位框架 driver.switch_to_default_content() 跳出框架
switch_to.default_content() #跳回最外层的页面 driver.find_element_by_xpath("html/body")
8、多层窗口定位
浏览器窗口的切换经过句柄(handle)来操做,每一个窗口都有一个句柄,表明当前窗口,须要操做哪一个页面的窗口,切换到窗口对应的句柄。
打开多个页面时,分别获取对应handle值,经过handle进行切换页面:
#定位当前页面:
handle1=driver.current_window_handle
switch_to_window( handle1)
#同一个浏览器多个窗口,指定定位到第一个浏览器窗口:
handle2=driver.window_handles[0]
switch_to_window(handle2)
#获取全部页面的句柄:hs=driver.window_handles
9、JS弹出对话框
在实际系统中,在完成某些操做时会弹出对话框来提示,主要分为"警告消息框","确认消息框","提示消息对话"三种类型的对话框。
1.警告消息框(alert)
警告消息框提供了一个"肯定"按钮让用户关闭该消息框,而且该消息框是模式对话框,也就是说用户必须先关闭该消息框而后才能继续进行操做。
2.确认消息框(confirm)
确认消息框向用户提示一个"是与否"问题,用户能够根据选择"肯定"按钮和"取消"按钮。
3.提示消息对话(prompt)
selenium 提供switch_to_alert()方法定位到 alert/confirm/prompt对话框。使用 text/accept/dismiss/send_keys 进行操做,这里注意的是send_keys只能对prompt进行操做。
alert = driver.switch_to_alert() #定位弹出对话 print (alert.text) #打印警告对话框内容 alert.accept() 或alert.dismiss() #至关于点击"确认"或取消.
10、JS滚动条
scrollTo函数:不存在兼容性问题。
--scrollHeight 获取对象的滚动高度。
--scrollLeft 设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离。
--scrollTop 设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离。
--scrollWidth 获取对象的滚动宽度。
## 回到顶部
def scroll_top():
if driver.name == "chrome":
js = "var q=document.body.scrollTop=0"
else:
js = "var q=document.documentElement.scrollTop=0"
return driver.execute_script(js)
#拉到底部
def scroll_foot():
if driver.name == "chrome":
js = "var q=document.body.scrollTop=10000"
else:
js = "var q=document.documentElement.scrollTop=10000"
return driver.execute_script(js)
#滚动到底部
js = "window.scrollTo(0,document.body.scrollHeight)"
driver.execute_script(js)
#滚动到顶部
js = "window.scrollTo(0,0)"
driver.execute_script(js)
# 经过javascript设置浏览器窗口的滚动条位置 js="window.scrollTo(100,450);" driver.execute_script(js)
# 聚焦元素
target = driver.find_element_by_xxxx()
driver.execute_script("arguments[0].scrollIntoView();", target)
11、input标签文件上传
input标签是能够直接send_keys.
self.driver = webdriver.Chrome()
driver.find_element_by_css_selector("#uploadTask").send_keys("G:/data.xlsx")