- webdriver 中比较常用的操作元素的方法有下面几个:
- send_keys :在元素上模拟按键输入
- clear: 清除元素的内容,如果可以的话
- click :单击元素
- submit :提交表单
- size:返回元素的尺寸
- itle:返回当前页面的标题
- find_elements_by_xx(‘xx’)
- find_elements: 用于获取一组元素。
- current_url:获取当前加载页面的URL
- text:获取元素的文本
- get_attribute(name):获得属性值
- is_displayed():设置该元素是否用户可见,本身这个函数用于判断某个元素是否存在页面上(这里的存在不是肉眼看到的存在,而是html代码的存在。某些情况元素的visibility为hidden或者display属性为none,我们在页面看不到但是实际是存在页面的一些元素)
注:submit()要求提交对象是一个表单,更强调对信息的提交。click()更强调
事件的独立性。(比如,一个文字链接就不能用submit()方法。)
- 鼠标事件:
- ActionChains 类鼠标操作的常用方法:
- context_click() 右击
- double_click() 双击
- drag_and_drop(source, target)) 拖动,在源元素上按下鼠标左键,然后移动到目标元素上释放。source: 鼠标按下的源元素,target: 鼠标释放的目标元素。
- move_to_element() 鼠标悬停在一个元素上
- click_and_hold() 按下鼠标左键在一个元素上
注:在使用ActionChains 类下面的方法之前,要先将包引入
from selenium.webdriver.common.action_chains import ActionChains
eg:
#引入ActionChains 类
from selenium.webdriver.common.action_chains import ActionChains
...
#定位到要右击的元素
right =driver.find_element_by_xpath("xx")
#对定位到的元素执行鼠标右键操作
ActionChains(driver).context_click(right).perform()
....
ActionChains 用于生成用户的行为,所有的行为都存储在actionchains 对象中,可以通过perform()执行存储的行为。
- 键盘事件 ,经常使用到的键盘操作:
- send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
- send_keys(Keys.SPACE) 空格键(Space)
- send_keys(Keys.TAB) 制表键(Tab)
- send_keys(Keys.ESCAPE) 回退键(Esc)
- send_keys(Keys.ENTER) 回车键(Enter)
- send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A)
- send_keys(Keys.CONTROL,‘c’) 复制(Ctrl+C)
- send_keys(Keys.CONTROL,‘x’) 剪切(Ctrl+X)
- send_keys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V)
- selenium中三种等待方式
-
sleep(): 强制等待,设置固定休眠时间。 python 的 time 包提供了休眠方法 sleep() , 导入 time 包后就可以使用 sleep(),进行脚本的执行过程进行休眠。
-
implicitly_wait():隐式等待,也叫智能等待,是 webdirver 提供的一个超时等待。隐式等待一个元素被发现,或一个命令完成。如果超出了设置时间的则抛出异常。
-
WebDriverWait():显式等待,同样也是 webdirver 提供的方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。默认检测频率为0.5s,默认抛出异常为:NoSuchElementException
#WebDriverWait()方法使用,共有两种方式
#等待时长10秒,默认0.5秒询问一次
element=WebDriverWait(driver, 10).until(lambda driver : driver.find_element_by_id("kw"))
element.send_keys("selenium")
# 判断id为kw元素是否消失
is_disappeared = WebDriverWait(driver, 10, 1).\
until_not(lambda x: x.find_element_by_id("kw").is_displayed())
print is_disappeared
#添加智能等待
#implicitly_wait()方法比 sleep() 更加智能,后者只能选择一个固定的时间的等待,前者可以在一个时间范围内智能的等待
driver.implicitly_wait(30)
driver.find_element_by_id("su").click()
#添加固定休眠时间
sleep(5) #sleep()方法以秒为单位,假如休眠时间小时 1 秒,可以用小数表示。
-
until(method, message=’ ’)
调用该方法提供的驱动程序作为一个参数,直到返回值不为False。 -
until_not(method, message=’ ’)
调用该方法提供的驱动程序作为一个参数,直到返回值为False。 -
len():len 为python 语言中的方法,用于返回一个对象的长度(或个数)。
-
pop():pop 也为python 语言中提供的方法,用于删除指定位置的元素,pop()为空默认选择最一个元素。
例如:
# 打印当前页面上type 为checkbox 的个数
print len(driver.find_elements_by_css_selector('input[type=checkbox]'))
# 把页面上最后1个checkbox 的勾给去掉
driver.find_elements_by_css_selector('input[type=checkbox]').pop().click()
- 操作窗口的一些方法 :
- current_window_handle:获得当前窗口句柄
- window_handles:返回的所有窗口的句柄到当前会话
- switch_to_window():用于处理多窗口操作的方法,与我们前面学过的switch_to_frame() 是类似,switch_to_window():用于处理多窗口之前切换,switch_to_frame() 用于处理多框架的切换。
- close():在关闭一个窗口时用的是close()方法,而非quit();close()用于关闭当前
窗口,quit()用于退出驱动程序并关闭所有相关窗口。
- 操作alert/confirm/prompt的一些方法:使用switch_to.alert()方法定位到alert/confirm/prompt。然后使用text/accept/dismiss/send_keys 按需进行操作。
- text :返回alert/confirm/prompt 中的文字信息。
- accept :点击确认按钮。
- dismiss :点击取消按钮,如果有的话。
- send_keys :输入值,这个alert\confirm 没有对话框就不能用了,不然会报错。
- 上传文件操作:
- 定位上传按钮后,在发送本地文件的路径即可
示例:
#定位上传按钮,添加本地文件
driver.find_element_by_name("file").send_keys('D:\\selenium_use_case\upload
_file.txt')
- 下载文件操作: