Python Sumaaries

python自动化测试中寻找元素并进行操作,如果在元素好找的情况下,相信大家都可以较熟练地编写用例脚本了,但光进行操作可能还不够,有时候也需要对预期结果进行判断。

常用

这里介绍几个常用断言的使用方法,可以一定程度上帮助大家对预期结果进行判断。-

assertEqual
assertNotEqual
assertTrue
assertFalse
assertIsNone
assertIsNotNone
assertEqual 和 assertNotEqual

assertEqual:如两个值相等,则pass
assertNotEqual:如两个值不相等,则pass
使用方法:
assertEqual(first,second,msg)其中first与second进行比较,如果相等则通过;msg为失败时打印的信息,选填;断言assertNotEqual反着用就可以了。
assertTrue和assertFalse

assertTrue:判断bool值为True,则pass
assertFalse:判断bool值为False,则Pass
使用方法:
assertTrue(expr,msg)其中express输入相应表达式,如果表达式为真,则pass;msg选填;断言assertFalse如果表达式为假,则pass
assertIsNone和assertIsNotNone

assertIsNone:不存在,则pass
assertIsNotNone:存在,则pass
使用方法:
assertIsNone(obj,msg)检查某个元素是否存在
总结:

常用
assertEqual(a, b) a == b
assertNotEqual(a, b) a != b
assertTrue(x) bool(x) is True
assertFalse(x) bool(x) is False
assertIs(a, b) a is b 2.7
assertIsNot(a, b) a is not b 2.7
assertIsNone(x) x is None 2.7
assertIsNotNone(x) x is not None 2.7
assertIn(a, b) a in b 2.7
assertNotIn(a, b) a not in b 2.7
assertIsInstance(a, b) isinstance(a, b) 2.7
assertNotIsInstance(a, b) not isinstance(a, b) 2.7
其它
assertAlmostEqual(a, b) round(a-b, 7) == 0
assertNotAlmostEqual(a, b) round(a-b, 7) != 0
assertGreater(a, b) a > b 2.7
assertGreaterEqual(a, b) a >= b 2.7
assertLess(a, b) a < b 2.7
assertLessEqual(a, b) a <= b 2.7
assertRegexpMatches(s, re) regex.search(s) 2.7
assertNotRegexpMatches(s, re) not regex.search(s) 2.7
assertItemsEqual(a, b) sorted(a) == sorted(b) and works with unhashable objs 2.7
assertDictContainsSubset(a, b) all the key/value pairs in a exist in b 2.7
assertMultiLineEqual(a, b) strings 2.7
assertSequenceEqual(a, b) sequences 2.7
assertListEqual(a, b) lists 2.7
assertTupleEqual(a, b) tuples 2.7
assertSetEqual(a, b) sets or frozensets 2.7
assertDictEqual(a, b) dicts 2.7
assertMultiLineEqual(a, b) strings 2.7
assertSequenceEqual(a, b) sequences 2.7
assertListEqual(a, b) lists 2.7
assertTupleEqual(a, b) tuples 2.7
assertSetEqual(a, b) sets or frozensets 2.7assertDictEqual(a, b) dicts 2.7
使用时机:

那么我们什么时候应该使用断言呢?如果没有特别的目的,断言应该用于如下情况:
防御性的编程
运行时对程序逻辑的检测
合约性检查(比如前置条件,后置条件)
程序中的常量
检查文档
例:防御性编程中添加断言
在代码开始添加注释是个好的开端,但是人们都不太喜欢读和更新这些注释,这些注释会很快变得过时。但对于断言,我们可以同时对这块代码编写文档,如果这些断言被违反了,会直接引起一个简单而又直接的失败。
assert target in(x, y, z)
if target ==x:
run_x_code()
elif target ==y:
run_y_code()
else:
assert target == z
run_z_code()

##################################################################
selenium+python+API分类总结

分类

方法

方法描述

客户端操作

init(self, host, port, browserStartCommand, browserURL)

构造函数。host:selenium server的ip;port:elenium server的port,默认为4444;browserStartCommand:浏览器类型,iexplore,firefox。browserURL:打开的url。

start(self)

启动客户端

stop(self)

关闭客户端

鼠标点击

click(self, locator)

点击链接、按钮、单选或者复选框

double_click(self, locator)

双击链接、按钮、单选或者复选框

click_at(self, locator, coordString)

点击链接、按钮、单选或者复选框后调用waitForPageToLoad,coordString是鼠标事件相对于locator返回元素的位置

double_click_at(self, locator, coordString)

双击链接、按钮、单选或者复选框后调用waitForPageToLoad,coordString是鼠标事件相对于locator返回元素的位置

鼠标操作

mouse_over(self, locator)

模拟用户将鼠标悬停在指定元素上

mouse_out(self, locator)

模拟用户将鼠标从指定元素移走

mouse_down(self, locator)

模拟用户按下鼠标键,未释放

mouse_down_at(self, locator, coordString)

模拟用户按下鼠标键,未释放,coordString是鼠标事件相对于locator返回元素的位置

mouse_up(self, locator)

模拟用户释放鼠标键

mouse_up_at(self, locator, coordString)

模拟用户释放鼠标键,coordString是鼠标事件相对于locator返回元素的位置

mouse_move(self, locator)

鼠标拖动指定元素

mouse_move_at(self, locator, coordString)

鼠标拖动指定元素,coordString是鼠标事件相对于locator返回元素的位置

按键操作

key_press(self, locator, keySequence)

模拟用户按下和释放键,keySequence可以是一个字符串(被按下键的ASCII码值);也可以是单独的字符,例如”e”。

shift_key_down(self)

按下shift键直到调用doShiftUp()或者载入新页面

shift_key_up(self)

释放shift键

alt_key_down(self)

按下alt键直到调用doAltUp()或者载入新页面

alt _key_up(self)

释放alt键

control_key_down(self)

按下control键直到调用doControlUp()或者载入新页面

control _key_up(self)

释放control键

key_down(self, locator, keySequence)

模拟用户按键不释放,keySequence可以是一个字符串(被按下键的ASCII码值);也可以是单独的字符,例如”e”。

key_up(self, locator, keySequence)

模拟用户释放键,keySequence可以是一个字符串(被按下键的ASCII码值);也可以是单独的字符,例如”e”。

设置输入值

type(self, locator, value)

设置输入框的值;也可用于设置组合框和复选框的值,所设置的值是勾选的选项,是不可见的文本。

单选和复选

check(self, locator)

选中单选或者复选框

uncheck(self, locator)

取消选中单选或者复选框

is_checked(self, locator)

检查单选或者复选按钮是否选中,如果指定元素不存在或者不是切换按钮则失败

下拉框

select(self, selectLocator, optionLocator)

使用option locator选择下拉列表的选项;其中option locator有以下几种形式:
1、 label=labelPattern:基于label匹配选项,例如可视化文本,* label=regexp:^[Oo]ther。(注意label前面的星号)
2、 value=valuePattern:基于值匹配选项,*** value=other。
3、 id=id:基于id匹配选项,
id=option1。
4、 index=index:基于索引(从零开始)匹配选项,
index=2。
如果未指定任何前缀,默认情况下是label。
selectLocator是下拉列表定位。

add_selection(self, locator, optionLocator)

对于多选元素,在已选选项集合中增加一个选项,locator是多选框定位。

remove_selection(self, locator, optionLocator)

对于多选元素,从已选选项集合中删除一个选项,locator是多选框定位。

get_selected_labels(self, selectLocator)

获取下拉列表或者多级下拉列表的多个已选选项的所有label(可视化文本)

get_selected_label(self, selectLocator)

获取下拉列表或者多级下拉列表的某个选项的label(可视化文本)

get_selected_values(self, selectLocator)

获取下拉列表或者多级下拉列表的多个已选选项的所有value(value属性)

get_selected_value(self, selectLocator)

获取下拉列表或者多级下拉列表的某个选项的value(value属性)

get_selected_indexes(self, selectLocator)

获取下拉列表或者多级下拉列表的多个已选选项的所有index(index从零开始)

get_selected_index(self, selectLocator)

获取下拉列表或者多级下拉列表的某个选项的index(index从零开始)

get_selected_ids(self, selectLocator)

获取下拉列表或者多级下拉列表的多个已选选项的所有element ID

get_selected_id(self, selectLocator)

获取下拉列表或者多级下拉列表的某个选项的element ID

is_something_selected(self, selectLocator)

判断下拉列表的某个选项是否选中

get_select_options(self, selectLocator)

获取下拉列表的所有label

设置超时或者等待事件

set_speed(self, value)

设置操作后的等待时间,以毫秒为单位,设置后作用于每一个selenium操作,默认情况下为0毫秒。

get_speed(self)

获取操作后的等待时间

set_timeout(self, timeout)

为action设置超时,默认为30秒。一般用于open以及waitFor*。运行错误返回error。

wait_for_page_to_load(self, timeout)

等待装载新页面。可以使用该命令代替”AndWait”命令,例如"clickAndWait", "selectAndWait", "typeAndWait"等(这些命令只在js API中提供)。Selenium装载新页面时通常会将”newPageLoaded” flag置为true,直到flag恢复为false才继续执行命令。超时后返回error。

提交

submit(self, formLocator)

表单提交,在没有提交按钮是非常有用的表单提交接口函数

窗口操作

open(self, url)

打开url,url可以是相对或者绝对url,open按钮一直等待页面载入后再处理,其隐式调用“AndWait”。注意:由于安全限制,url的域需要与runner HTML(Selenium Server)的域保持一致,如果需要使用不同域的url,需要启动新的浏览器会话。

open_window(self, url, windowID)

如果标识为ID的窗口还未打开,则打开弹出窗口。打开窗口后,需要使用selectWindow命令选择。注意:当window.open调用发生在“onLoad”事件之前或者事件过程时,Selenium无法成功调用window.open,在这种情况下,可以使用Selenium的openWindow命令强制打开窗口,注意使用空白页面,例如openWindow(””,”muFunnyWindow”)。
注意:url可以为空,’windowID’是js window ID。

select_window(self, windowID)

选择弹出的窗口,选中后所有的命令都在选中窗口中执行。如果想再次选择主窗口,windowID使用null。Selenium根据windowID查找窗口对象的几种策略:1、如果windowID是null,选中浏览器初始化时打开的最原始的窗口。2、如果windowID是当前应用窗口的js变量名,则该变量包含js window.open()方法的返回值。3、最后,Selenium查找其哈希表,在该表中维护着字符串与窗口对象的映射表,这里的字符串与js方法window.open(url, windowName, windowFeatures, replaceFlag)中的第二个参数匹配。如果不知道窗口的名字,可以通过selenium日志查看window.open创建窗口时的名字标识。同open_window,无法成功调用window.open时,可强制性打开空白页面。

select_frame(self, locator)

在当前窗口选择frame或者iframe,可以多次调用该命令选择嵌套的frame。如果想选择parent frame,定位符使用’relative=parent’;如果想选择top frame,使用’relative=top’。也可以使用DOM表达式直接查找frame,例如dom=frames["main"].frames["subframe"]。

go_back(self)

模拟用户点击浏览器的后退按钮

refresh(self)

模拟用户点击浏览器的刷新按钮

close(self)

模拟用户点击浏览器的关闭按钮

window_focus(self, windowName)

将焦点设置到窗口上,windowName为窗口名

window_maximize(self, windowName)

最大化窗口,windowName为窗口名

get_all_window_ids(self)

返回浏览器打开的所有窗口ID

get_all_window_names(self)

返回浏览器打开的所有窗口名

get_all_window_titles(self)

返回浏览器打开的所有窗口标题

弹出窗口

wait_for_pop_up(self, windowID, timeout)

为等待窗口弹出设置超时,windowID为js的窗口ID,超时的单位为毫秒。超过超时时间后返回错误。

choose_cancel_on_next_confirmation(self)

默认情况下,返回true,就像用户手工点击ok;运行完此命令后,下次再调用confirm()则返回false,就像用户点击Cancle。

answer_on_next_prompt(self, answer)

在下次js窗口弹出时,selenium返回answer中的字符串

is_alert_present(self)

判断是否有alert窗口出现,此API不会抛出异常

is_prompt_present(self)

判断是否有prmp窗口出现,此API不会抛出异常

is_confirmation_present(self)

判断是否有confirm窗口出现,此API不会抛出异常

get_alert(self)

获取先前弹出的js alert窗口的内容,如果没有alert窗口则失败。类似于手动点击ok。注意:1、如果alert出现但是没有获取或者验证它,则selenium的下次操作会失败。2、selenium中的alert不会弹出可视化的alert。3、不支持页面onload()时间处理过程中的js alert窗口,在这种情况下,将会弹出可视化对话窗口,直到手动点击ok后selenium才会继续执行。

get_confirmation(self)

获取先前弹出的js confirm窗口的内容,如果没有confirm窗口则失败。类似于手动点击ok,但是如果在之前执行了chooseCancelOnNextConfirmation命令,则类似于手动点击cancel。注意:1、如果confirm出现但是没有获取或者验证它,则selenium的下次操作会失败。2、selenium中的confirm不会弹出可视化的confirm。3、不支持页面onload()时间处理过程中的js confirm窗口,在这种情况下,将会弹出可视化对话窗口,直到手动点击ok后selenium才会继续执行。

get_prompt(self)

获取先前弹出的js prompt窗口的内容,如果没有prompt窗口则失败。注意:1、如果alert出现但是没有获取或者验证它,则selenium的下次操作会失败。2、selenium中的prompt不会弹出可视化的prompt。3、不支持页面onload()时间处理过程中的js prompt窗口,在这种情况下,将会弹出可视化对话窗口,直到手动点击ok后selenium才会继续执行。4、调用此API之前必须调用answerOnNextPromp命令,prompt才能成功处理。

获取页面元素,元素索引

get_all_buttons(self)

返回页面所有button的ID,如果某个button没有ID,返回“”

get_all_links(self)

返回页面所有link的ID,如果某个link没有ID,返回“”

get_all_fields(self)

返回页面所有输入域的ID,如果某个输入域没有ID,返回“”

get_attribute_from_all_windows(self, attributeName)

根据属性名获取某个属性在所有已知窗口中的实例

get_element_index(self, locator)

获取元素对于0索引的相对索引,忽略comment命令和空文本节点。

获取元素属性

get_location(self)

获取当前页面的绝对url

get_title(self)

获取当前页面的绝对title

get_body_text(self)

获取页面的内容

get_value(self, locator)

获取输入量的值(以空格截断),对于单选和复选框,返回值为on或者off

get_text(self, locator)

获取元素的文本,适用于任何包含文本的元素。此API调用textContent(firefox)或者innerText(IE)。(不同js)

get_table(self, tableCellAddress)

获取表格的单元格,tableCellAddress的格式为tableLocator.row.column,其中行和列的索引从零开始,例如foo.1.4。

get_attribute(self, attributeLocator)

获取元素属性的value

get_element_position_left(self, locator)

获取元素的水平位置

get_element_position_top(self, locator)

获取元素的垂直位置

get_element_width(self, locator)

获取元素的宽度

get_element_height(self, locator)

获取元素的高度

验证元素

is_text_present(self, pattern)

验证页面上是否有满足pattern的文本

is_element_present(self, locator)

验证页面上是否有满足pattern的文本

is_visible(self, locator)

验证元素是否可见,元素不存在时失败。元素不可见通过将css的”visibility”设置为“hidden”或者将“display”设置为“none”。

is_editable(self, locator)

验证输入元素是否被disable,元素不存在时失败。

is_ordered(self, locator1, locator2)

验证两个元素是否属于同一个父节点,并且排序。两个元素相同是不排序。

移动元素

dragdrop(self, locator, movementsString)

将定位到的元素拖曳,movementString是目的地址相对于当前位置的偏移,以像素衡量,例如”+70,-300”。不推荐使用dragAndDrop代替。

drag_and_drop(self, locator, movementsString)

将定位到的元素拖曳,movementString是目的地址相对于当前位置的偏移,以像素衡量,例如”+70,-300”。不推荐使用dragAndDrop代替。

drag_and_drop_to_object(self, locatorOfObjectToBeDragged, locatorOfDragDestinationObject)

将元素拖曳到目标对象上,已两个元素的左上角位置重合

光标操作

set_cursor_position(self, locator, position)

在输入框或者多行文本中移动光标,如果元素不是输入框或者多行文本,则失败。position是输入域中光标的数字位置,其中0是开头,-1是结尾。

get_cursor_position(self, locator)

返回输入元素(输入框或者多选框)或者多行文本框的文本光标位置。如果指定元素不是输入元素或者多行文本框,或者指定元素没有光标,该方法调用失败。注意:该函数在某些浏览器上可能会失效(浏览器对js解析的差异性)。特别是当光标或者选择项被js清除时,该命令趋向于返回光标最后定位的位置,即使光标已经离开页面。

js代码

get_eval(self, script)

执行script中的js脚本代码片段,只返回最后一行的结果。注意:1、默认情况下,脚本代码片段在selenium对象的上下文中执行,因此this是指向selenium对象,window指向最上层的运行测试窗口,而不是应用窗口。2、如果想指向应用窗口,使用this.browserbot.getCurrentWindow()。3、如果想定位到应用页面中的某个元素,使用this.page().findElement(“foo”)定位foo元素。

get_expression(self, expression)

用于js的预处理,用于产生类似assertExpression和waitForExpression等。expression是返回值。

wait_for_condition(self, script, timeout)

不断地运行js代码片段知道返回为true,代码片段可以有多行,但只返回最后一行的结果,timeout的单位为毫秒。注意:默认情况下js代码片段在selenium runner的测试窗口下运行而不是应用窗口,如果需要在应用窗口下运行,先调用selenium.browserbot.getCurrentWindow()。运行错误返回error。

获取html源码

get_html_source(self)

返回整个html源码

Cookie操作

get_cookie(self)

返回当前测试页面的所有cookies。

create_cookie(self, nameValuePair, optionsString)

以当前测试页面path和domain创建新的cookie,也可以显示指定path。nameValuePair是键值对。optionsString目前支持两种可选项,path=/path/和max_age=60(cookie的有效时间,以秒为单位)。

delete_cookie(self, name, path)

删除指定路径下的name的value

事件触发

fire_event(self, locator, eventName)

显示地模拟事件,以触发相应的”onevent”处理函数,eventName例如是focus或者blur等。

多frame和多窗口

get_whether_this_frame_match_frame_expression(self, currentFrameString, target)

用于代理注入模式,在该模式下,get_whether_this_frame_match_frame_expression在每个frame和window中运行,帮助selenium识别出当前的frame。在这种情况下,当测试脚本调用selectFrame时,每个frame都调用此API计算哪个frame被选中,选中的frame选择true,其它frame返回false。CurrentFrameString是当前frame,target是新frame(可能是相对于当前frame)

get_whether_this_window_match_window_expression(self, currentWindowString, target)

原理同上

辅助功能:日志,状态栏,

get_log_messages(self)

很少使用,主要用于当frame来自不同域时,获取日志信息,因为在这种情况下不符合js日志集中管理机制。

set_context(self, context, logLevelThreshold)

写消息到状态栏或者增加浏览器端的日志,logLevelThreshold用于指定日志级别(debug,info,warn,error)。注意浏览器端的日志不会返回给服务器,并且对于客户驱动器不可见。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容