一、操作目的

1.1 自动化测试常用操作

1、定位网页上的元素,并存储到一个变量中;
2、对变量进行操作,比如点击或输入文字;
3、设定页面元素的操作值;

二、定位方法汇总

2.1 findElement(s)

click(self, on_element=None)
click_and_hold(self, on_element=None)
context_click(self, on_element=None)
double_click(self, on_element=None)
drag_and_drop(self, source, target)
drag_and_drop_by_offset(self, source, xoffset, yoffset)
key_down(self, value, element=None)
key_up(self, value, element=None)
move_by_offset(self, xoffset, yoffset)
move_to_element(self, to_element)
move_to_element_with_offset(self, to_element, xoffset, yoffset)
pause(self, seconds)
perform(self)
release(self, on_element=None)
reset_actions(self)
send_keys(self, *keys_to_send)
send_keys_to_element(self, element, *keys_to_send)

2.2、selenium.webdriver.common.by

CLASS_NAME = 'class name'
CSS_SELECTOR = 'css selector'
ID = 'id'
LINK_TEXT = 'link text'
NAME = 'name'
PARTIAL_LINK_TEXT = 'partial link text'
TAG_NAME = 'tag name'
XPATH = 'xpath'

2.3、selenium.webdriver.common.keys

ADD = '\ue025'
ALT = '\ue00a'
ARROW_DOWN = '\ue015'
ARROW_LEFT = '\ue012'
ARROW_RIGHT = '\ue014'
ARROW_UP = '\ue013'
BACKSPACE = '\ue003'
BACK_SPACE = '\ue003'
CANCEL = '\ue001'
CLEAR = '\ue005'
COMMAND = '\ue03d'
CONTROL = '\ue009'
DECIMAL = '\ue028'
DELETE = '\ue017'
DIVIDE = '\ue029'
DOWN = '\ue015'
END = '\ue010'
ENTER = '\ue007'
EQUALS = '\ue019'
ESCAPE = '\ue00c'
F1 = '\ue031'
F10 = '\ue03a'
F11 = '\ue03b'
F12 = '\ue03c'
F2 = '\ue032'
F3 = '\ue033'
F4 = '\ue034'
F5 = '\ue035'
F6 = '\ue036'
F7 = '\ue037'
F8 = '\ue038'
F9 = '\ue039'
HELP = '\ue002'
HOME = '\ue011'
INSERT = '\ue016'
LEFT = '\ue012'
LEFT_ALT = '\ue00a'
LEFT_CONTROL = '\ue009'
LEFT_SHIFT = '\ue008'
META = '\ue03d'
MULTIPLY = '\ue024'
NULL = '\ue000'
NUMPAD0 = '\ue01a'
NUMPAD1 = '\ue01b'
NUMPAD2 = '\ue01c'
NUMPAD3 = '\ue01d'
NUMPAD4 = '\ue01e'
NUMPAD5 = '\ue01f'
NUMPAD6 = '\ue020'
NUMPAD7 = '\ue021'
NUMPAD8 = '\ue022'
NUMPAD9 = '\ue023'
PAGE_DOWN = '\ue00f'
PAGE_UP = '\ue00e'
PAUSE = '\ue00b'
RETURN = '\ue006'
RIGHT = '\ue014'
SEMICOLON = '\ue018'
SEPARATOR = '\ue026'
SHIFT = '\ue008'
SPACE = '\ue00d'
SUBTRACT = '\ue027'
TAB = '\ue004'
UP = '\ue013'

2.4、selenium.webdriver.Chrome

函数

描述

back()

返回

close()

关闭当前窗口

delete_all_cookies()

删除所有 cookies

delete_cookie('name')

按名字删除 cookie

find_element(by='id', value=None)

查找给定标识符的元素

find_element_by_class_name('name')

通过类名来定位元素

find_element_by_css_selector('css_selector')

通过 css 选择器来定位元素

find_element_by_id('id')

通过 id 来定位元素

find_element_by_link_text('link_text')

通过链接内容来定位元素

find_element_by_partial_link_text('link_text')

通过链接部分内容来定位元素

find_element_by_name('name')

通过元素名称来定位元素

find_element_tag_name('name')

通过标签名来定位元素

find_element_by_xpath('xpath')

通过 xpath 来定位元素

find_elements(by='id', value=None)

find_elements_by_class_name('name')

find_elements_by_css_selector('css_selector')

find_elements_by_id('id')

find_elements_by_link_text('text')

find_elements_by_partial_link_text('link_text')

find_elements_by_name('name')

find_elements_by_tag_name('name')

find_elements_by_xpath('xpath')

forward()

向前

fullscreen_window()

全屏

get('url')

访问 url 页面

get_cookie(''name')

通过名称获取 cookie

get_cookies()

获取所有 cookies

get_log('log_type')

获取日志,类型有:browserdriverclientserver

get_screenshot_as_base64(self)

获取图片存为 base64 编码

get_screenshot_as_file('file_name')

获取图片存为文件,需要指定文件名,png 后缀

get_screenshot_as_png()

将图片存为二进制数据

get_window_position(windowHandle='current')

获取当前窗口的 x,y 位置

get_window_rect()

获取 x,y 坐标和当前窗口的宽高

get_window_size(windowHandle='current')

获取当前窗口的宽高

implicitly_wait('time_to_wait)

隐式等待一个元素加载或命令执行完成的时间。

maximize_window()

最大化

minimize_window()

最小化

refresh()

刷新

save_screenshot('findname')

保存屏幕截图

set_page_load_timeout('time_to_wait')

set_script_timeout('time_to_wait')

set_window_position(x, y, windowHandle='current')

set_window_rect(x, y, width, height)

set_window_size(width, height, windowHandle='current')

start_client()

start_session(capabilities, browser_profile=None)

stop_client()

switch_to_active_element()

switch_to_alert()

switch_to_default_content()

switch_to_frame('frame_reference')

切换到指定框架

switch_to_window('window_name')

切换到指定窗口

那么总的来说,查找元素分为以下两类:
1、查到单个元素

find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector

2、查找多个元素(返回列表)

find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector

上面的是公有方法,还有两个私有方法是:

find_element()
 find_elements()
 # 这两个方法使用的时候,需要提供两个参数
 # 一个是 By.xx ,这里的 xx 分别是上面列出的几种定位方法的大写
 # 比如 find_element(By.ID, 'su')
 # 比如 find_element(By.CSS_SELECTOR, 'h1')

三、编写实际代码测试

3.1 元素定位

// id 定位
WebElement username = driver.findElement(By.id("username"));
// name 定位
WebElement username = driver.findElement(By.name("username"));
// 部分链接文字定位
WebElement link = driver.findElement(By.partialLinkText("sog"));
// 使用标签名定位
WebElement link = driver.findElement(By.tagName("a"));
// 使用 class 名定位 
WebElement input = driver.findElement(By.className("tight"));
// 使用xpath定位
WebElement button = driver.findElement(By.xpath("/html/body/div/input[@value='查询']"));
// 上述xpath使用的是绝对路径定位,当页面发生变化时,很容易造成代码失效。
// 所以推荐使用相对路径,比如将上述定位改成:"//input[@value='查询']"
// 如果定位元素是列表时,下标从1开始

// css定位
WebElement button = driver.findElement(By.cssSelector("input#div > input#ok"));
WebElement button = driver.findElement(By.cssSelector("input#div > input + a + img"));
WebElement button = driver.findElement(By.cssSelector("input:nth-child(2)"));
WebElement button = driver.findElement(By.cssSelector("input#div :nth-child(2)"));
WebElement button = driver.findElement(By.cssSelector("a['href' ^= 'http://www.baidu.com']"));
// ^= 匹配开头,$= 匹配结尾 *= 链接含有即匹配中

xpath模糊定位

xpath函数

定位表达式

解释

Starts-with()

//img[starts-with(@alt,'div1')]

查找图片alt属性开始位置包含“div1“关键字的页面元素

Contains()

//img[contains(@alt,'g1')]

查找图片alt属性包含“gl“关键字的页面元素

XPath 轴(Axis)定位:

关键字

含义

实例

解释

parent

选择当前节点的上层节点

//img[@alt='ok']/parent::div

查找alt属性为ok的图片,然后向定位上层div元素

child

ancestor

所有上层节点

descendant

所有下层节点

following

当前节点之后所有节点

following-sibling

后面所有同级节点

preceding

当前节点之前所有节点

preceding-sibling

前面所有同级节点

有了计划记得推动,不要原地踏步。