1、submit()

submit()方法用于提交表单,这里特别用于没提交按钮的情况,例如搜索框输入关键字之后的“回车”操作,那么就可以通过submit()来提交搜索框的内容。

3鼠标事件

在现在的web 产品中,随着前端技术的发展,页面越来越华丽,鼠标的操作也不单单只有单击,现在页面中随处可以看到需要右击、双击、鼠标悬停、甚至是鼠标拖动等操作的功能设计。在WebDriver 中这些关于鼠标操作的方法由ActionChains 类提供。

3.1ActionChains 类提供的鼠标操作的常用方法

1、perform() 执行所有ActionChains 中存储的行为

2、context_click() 右击

3、double_click() 双击

4、drag_and_drop() 拖动

5、move_to_element() 鼠标悬停

4键盘事件

有时候我们在测试时需要使用Tab 键将焦点转移到下一个元素,Keys()类提供键盘上几乎所有按键的方法,前面了解到send_keys()方法可以模拟键盘输入,除此之外它还可以模拟键盘上的一些组合键,例:Ctrl+A、Ctrl+C 等。

4.1键盘操作

from selenium.webdriver.common.keys import Keys

在使用键盘按键方法前需要先导入keys 类包。

下面经常使用到的键盘操作:

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)

send_keys(Keys.F1) 键盘F1

……

send_keys(Keys.F12) 键盘F12

 

5设置元素等待

如今大多数的web 应用程序使用AJAX 技术。当浏览器在加载页面时,页面内的元素可能并不是同时被加载完成的, 这给元素的定位添加的困难。如果因为在加载某个元素时延迟而造成
ElementNotVisibleException 的情况出现,那么就会降低的自动化脚本的稳定性。

WebDriver 提供了两种类型的等待:显式等待和隐式等待。

5.1显式等待

显式等待使WebdDriver 等待某个条件成立时继续执行,否则在达到最大时长时抛弃超时异常(TimeoutException)。

5.2隐式等待

隐式等待是通过一定的时长等待页面所元素加载完成。哪果超出了设置的时长元素还没有被加载测抛NoSuchElementException 异常。

WebDriver 提供了implicitly_wait()方法来实现隐式等待,默认设置为0。它的用法相对来说要简单的多。

例子:

#coding=utf-8

from selenium import webdriver

from selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.Firefox()

driver.implicitly_wait(10)

driver.get("http://www.baidu.com")

input_ = driver.find_element_by_id("kw22")

input_.send_keys('selenium')

driver.quit()

implicitly_wait()默认参数的单位为秒,本例中设置等待时长为10 秒,首先这10 秒并非一个固定的等待时间,它并不影响脚本的执行速度。其次,它并不真对页面上的某一元素进行等待,当脚本执行到某个元素定位时,如果元素可定位那么继续执行,如果元素定位不到,那么它将以轮询的方式不断的判断元素是否被定位到.

假设在第6 秒钟定位到元素则继续执行。直接超出设置时长(10 秒)还没定位到元素则抛出异常。

在上面的例子中,显然百度输入框的定位id=kw22 是有误的,那么在超出10 秒后将抛出异常。

5.3sleep 休眠方法

有时间我们希望脚本执行到某一位置时做固定时间的休眠,尤其是在脚本调试的过程中。那么可以使用sleep()方法,需要说明的是sleep()由Python 的time 模块提供。

例子:

#coding=utf-8

from selenium import webdriver

from time import sleep

driver = webdriver.Firefox()

driver.get("http://www.baidu.com")

sleep(2)

driver.find_element_by_id("kw").send_keys("webdriver")

driver.find_element_by_id("su").click()

sleep(3)

driver.quit()

当执行到sleep()方法时会固定的休眠所设置的时长,然后再继续执行。sleep()方法默认参数以秒为单位,如果设置时长小于1 秒,可以用小数点表示,如:sleep(0.5)

6多表单切换

在web 应用中经常会遇到frame 嵌套页面的应用,页WebDriver 每次只能在一个页面上识别元素,对于frame 嵌套内的页面上的元素,直接定位是定位是定位不到的。这个时候就需要通过switch_to_frame()方法将当前定位的主体切换了frame 里。

7多窗口切换

有时候需要在不同的窗口切换,从而操作不同的窗口上的元素,WebDriver 提供了switch_to_window()方法可以切换到任意的窗口。

8 警告框处理

在WebDriver 中处理JavaScript 所生成的alert、confirm 以及prompt 是很简单的。具体做法是使用switch_to_alert()方法定位到alert/confirm/prompt。然后使用
text/accept/dismiss/send_keys 按需进行操做。

1、text 返回alert/confirm/prompt 中的文字信息。

2、accept 点击确认按钮。

3、dismiss 点击取消按钮,如果有的话。

4、send_keys 输入值,这个alert\confirm 没有对话框就不能用了,不然会报错。

如图 百度搜索设置的弹出的弹窗是不能通过前端工具对其进行定位的,这个时候就可以通过switch_to_alert()方法接受这个弹窗。