【任务描述】:登录页面有账号、密码、验证码、按钮等界面元素,如何通过元素定位方法准确的定位到这些界面元素,并根据业务逻辑实现界面元素的鼠标键盘操作?
【任务目标】:通过设计登录页面的自动化测试脚本,掌握基本元素定位方法和页面结构及元素的分析方法。
【任务储备】:
1、八种基本元素定位方法
元素定位是编写自动化测试脚本的基础操作,Selenium提供了id、name、xpath、css_selector、class_name、link_text、partial_link_text、tag_name八种基本元素定位方法,可以使用driver.find_element_by_定位方法(‘内容’)定位网页上的任何一个元素,具体定位方法如下表所示。
表1 八种基本元素定位方法
定位方法 | 方法声明 | 功能描述 |
id定位 | find_element_by_id(‘id’) | 通过标签id属性定位元素 |
name定位 | find_element_by_name(‘name’) | 通过标签name属性定位元素 |
xpath定位 | find_element_by_xpath(‘xpath’) | 通过标签的路径定位元素,具体的xpath知识请参考附录2 |
css_selector定位 | find_element_by_css_selector(‘selector’) | 通过css选择器定位元素 |
class_name定位 | find_element_by_class_name(‘className’) | 通过css名字定位元素 |
link_text定位 | find_element_by_link_text(‘text’) | 通过超链接(a标签)里面的文字定位元素 |
partial_link_text定位 | find_element_by_partial_link_text(‘partial_text’) | 通过超链接(a标签)里面的部分文字定位元素 |
tag_name定位 | find_element_by_tag_name(‘tag_name’) | 通过标签名定位元素 |
小贴士:Selenium也提供了一次选择多个元素的定位方法,单个元素和多个元素定位方法的区别就是element后面是否增加s,如find_element_by_name(‘name’)通过标签name属性定位单个元素,find_elements_by_name(‘name’)name通过标签name属性定位多个元素。
2、鼠标键盘操作方法
自动化测试在获取到界面元素后,需要对元素进行一些鼠标或者键盘模拟操作,如在输入框里面输入内容、单击、双击等操作,Selenium提供的鼠标操作和键盘操作方法分别如下2个表所示。
表2 鼠标操作方法
方法声明 | 功能描述 |
click(element) | 单击鼠标左键 |
click_and_hold(element) | 单击鼠标左键并长按不松开 |
context_click(element) | 单击鼠标右键 |
double_click(element) | 双击鼠标左键 |
drag_and_drop(source,target) | 将source元素拖动到target元素 |
drag_and_drop(source,xoffset,yoffset) | 将source元素拖动到(xoffset,yoffset)坐标 |
send_keys(content) | 将内容(content)发送到对应元素,内部包含字符串内容或者键盘操作 |
表3 键盘操作方法
属性 | 描述 | 属性 | 描述 |
Keys.ENTER | 回车键 | Keys.ARROW_DOWN | 方向键(下) |
Keys.BACK_SPACE | 退格键 | Keys.ARROW_UP | 方向键(上) |
Keys.SPACE | 空格键 | Keys.ARROW_LEFT | 方向键(左) |
Keys.TAB | TAB键 | Keys.ARROW_RIGHT | 方向键(右) |
Keys.ESCAPE | ESC键 | Keys.F1 | 功能键(F1) |
Keys.SHIFT | Shift键 | Keys.Fn | 功能键(Fn),n表示2到11的任何一个数字 |
Keys.CONTROL | Ctrl键 | Keys.F12 | 功能键(F2) |
使用格式:元素对象.鼠标操作方法
示例:driver.find_element_by_id(‘id’).click(),表示鼠标单击界面上ID为id的元素。
如果要往页面元素输入文字或者按键内容,则必须调用send_keys()方法,将内容发送给对应元素,使用格式:元素对象.send_keys(content)
示例:driver.find_element_by_id(‘id’).send_keys(‘测试’),往界面上ID为id的元素上输入内容”测试”
在一些应用场景里需要按照顺序多次操作鼠标或者键盘,如实现剪切功能,则需要先鼠标或者键盘选择内容,然后再按Ctrl+v键盘。这种场景必须用到ActionChains类,ActionChains会将需要的多个操作按照顺序放在一个队列里,当调用其perform()方法时才按照队列里面的顺序依次执行。
使用格式:ActionChains(driver).多个动作方法().perform()
示例:
ActionChains(driver).send_keys(Keys.CONTROL,'a').send_keys(Keys.CONTROL,'v').perform()
表示在选择的界面元素先执行全选,然后再剪切这2个动作。
小贴士:在使用键盘属性时,必须引入Selenium的Keys,具体引入语句为:
from selenium.webdriver.common.keys import Keys
在使用ActionChains时,必须引入Selenium的ActionChains,具体引入语句为:
from selenium.webdriver import ActionChains
【任务实施】
1、页面结构分析。
2、定位账号输入框并输入”administrator”账户名。
3、定位密码输入框并输入”administrator123”。
4、定位验证码输入框,输入4位以内的任何字符(验证码验证功能未启用)。
5、定位“登录”按钮并鼠标单击或者回车。

