​ WebDriver API相比之前的Selenium-RC API而言不仅解决了一些相关的限制还使得接口更简洁同时更好地支持了页面本身不重新加载而页面元素发生改变的动态网页。所以WebDriver API的实现目的不仅是提供一个良好的面向对象API而且对Web应用程序测试过程中所产生的问题也提供了很大的支持。​ Web应用程序的测试主要是基于调用WebDriver API来模拟用户的操作然后判断操作结果是否与预期结果一致从而达到自动化测试的目的。所以熟悉WebDriver的API使用显得至关重要这也是完成自动化测试的先决条件。1.鼠标键盘模块API 方法都封装在ActionChains类中。fromselenium.webdriver.common.action_chainsimportActionsChains常用的鼠标事件对应的API方法context_click()右击fromseleniumimportwebdriverfromselenium.webdriver.common.action_chainsimportActionChainsfromtimeimportsleepfromselenium.webdriver.common.byimportBy driverwebdriver.Chrome()driver.get(http://www.baidu.com)sleep(2)elemdriver.find_element(By.XPATH,//ul[classs-hotsearch-content]/li[1]/a)sleep(2)ActionChains(driver).context_click(elem).perform()sleep(2)driver.close()double_click()双击drag_and_drop(源位置目标位置)拖动定位元素的源位置定位元素要移动的目标位置执行元素的移动操作move_to_element(源位置目标位置)鼠标悬停在一个元素上定位元素的源位置定位元素要移动的目标位置执行元素的移动操作click_and_hold()按下鼠标左键在一个元素上2.键盘事件设置键盘事件其中键盘事件相关的API方法都封装在Keys类中。fromselenium.webdriver.common.keysimportKeys#设置键盘事件键盘删除时间send_keys(Keys.BACKSPACE)空格事件send_keys(Keys.SPACE)全选事件send_keys(Keys.CONTROL,a)复制事件send_keys(Keys.CONTROL,c)粘贴事件send_keys(Keys.CONTROL,v)3.多个iframe处理在Selenium中iframe同样如此如果驱动器对象处于当前iframe框架中此时驱动器对象是无法操作其他的iframe的。如果需要操作则需要调用对应的API方法完成iframe的切换操作。​ frame标签有framesetframeiframe三种类型其中frameset跟其他普通标签没有区别不会影响到正常的定位frame与iframe对Selenium定位而言是一样的。Selenium有一组方法对frame进行操作。1.如何切换frameSelenium提供了switch_to.frame()方法来切换frame。switch_to.frame(param)#param 表示传入的参数该参数可以是iframe元素的id,name,index等属性还可以是定位该iframe所返回的Selenium的WebElement对象。​ 一般情况下如果iframe存在id和name属性则使用这两个属性可以直接定位。但有些场景中前端frame框架中不一定设置这两个属性那么就需要使用indexWebElement来完成定位操作。index的值是从0开始的传入整型参数即表示使用index来进行定位但是如果传入的是String类型则表示使用idname来进行定位。WebElement对象即用find_element系列方法所取得的对象可以用tag_name,Xpath父子定位等方式来定位frame对象。2.从frame中切回主文档​ 如果切换至frame则不能继续操作主文档的元素。如果需要操作主文档元素则必须完成文档与frame的切换操作。self.get_driver.switch_to.default_content()3.嵌套frame的操作遇到多层frame嵌套的情况先从主文档切换到iframe1然后从iframe1切换到iframe2一层层切换进去。self.get_driver.switch_to.frame(iframe1)self.get_driver.switch_to.frame(iframe2)从iframe再切换回iframe1这里Selenium提供了一个方法能够从子iframe切回到父iframe而不用先切回主文档再切换进来。self.get_driver.switch_to.parent_frame()4.下拉列表框的多种实现方式间接选择先定位到下拉列表框再定位其中的选项。直接选择直接定位到下拉列表框中的选项。Select模块WebDriver API 中内置了一个Select模块该模块专门用于实现下拉列表框的处理操作。frome selenium.webdriver.support.selectimportSelect其中有三种定位选项的方法。select_by_index()通过索引定位(从0开始)select_by_value()通过value值定位select_by_visible_text()通过选项的文本值定位基本思路1.获取Select对象 select_objectSelect()2.通过索引获取3.通过value值获取3.通过文本值获取Select模块提供了四种取消选中项的方法deselect_all取消全部的已选择项deselect_by_index取消已选中的索引项deselect_by_value取消已选中的value值。deselect_by_visible_text取消已选中的文本值。**注意**遇到下拉列表框选项已经默认选中的情况这时可以用到这四种取消选中项的方法。​