1. 元素是否存在
find_elements
2. 元素屬性是否正確
get_attribute
assert 'xxxx' in element.get_attribute('resource-id')
3. 查找元素文本
assert float(find_element_by_id('xxxx).text)>20
4. hamcrest斷言
-
Hamcrest是用于Java的單元測試的框架,它使用matcher匹配器來進(jìn)行斷言。在Spring-boot-starter中集成了Hamcrest,無需而外引入。
[https://github.com/hamcrest/PyHamcrest](https://github.com/hamcrest/PyHamcrest)
安裝
pip install PyHamcrest
- IS
String str1 = "text";
String str2 = " text ";
assertThat(str1, is(equalToIgnoringWhiteSpace(str2)));
String str1 = "text";
String str2 = "text";
assertThat(str1, is(str2));
- NOT
String str1 = "text";
String str2 = " text ";
assertThat(str1, not(equalToIgnoringWhiteSpace(str2)));
String str1 = "text";
String str2 = "text";
assertThat(str1, not(str2));
- containsString
String str1 = "text123";
String str2 = "text";
assertThat(str1, containsString(str2));
- 以為某個(gè)字段開頭/結(jié)尾
String str1 = "text123";
assertThat(str1, startsWith("text"));// 以某個(gè)字符開頭
assertThat(str1, endsWith("text"));// 以某個(gè)字符開頭
- 判斷兩個(gè)對(duì)象是否為同一個(gè)實(shí)體
Cat cat=new Cat();
assertThat(cat, sameInstance(cat));
- 類似OR的效果
String str = "calligraphy";
String start = "call";
String end = "foo";
assertThat(str, anyOf(startsWith(start), containsString(end)));
- 類似AND的效果
String str = "calligraphy";
String start = "call";
String end = "phy";
assertThat(str, allOf(startsWith(start), endsWith(end)));
- Number 匹配器
assertThat(1, greaterThan(0)); // 大于
assertThat(5, greaterThanOrEqualTo(5)); //大于等于
assertThat(-1, lessThan(0)); // 小于
assertThat(-1, lessThanOrEqualTo(5)); // 小于等于
- Text 匹配器
String str = "";
assertThat(str, isEmptyString()); // 空字符串
assertThat(str, isEmptyOrNullString()); // 空字符串或者null
- 匹配字符串相等
String str1 = "text";
String str2 = " text ";
assertThat(str1, equalToIgnoringWhiteSpace(str2)); // 忽略左右空白
assertThat(a, equalToIgnoringCase(b)); //忽略大小寫
Collections 匹配器
檢查某個(gè)元素是否在集合中
List<String> collection = Lists.newArrayList("ab","cd","ef");
assertThat(collection, hasItem("cd"));
assertThat(collection, not(hasItem("zz")));
assertThat(collection, hasItems("cd", "ab")); // 檢查多個(gè)元素是否在集合中
- 檢查所有元素
List<String> collection = Lists.newArrayList("ab","cd","ef");
assertThat(collection, hasItems("ab","cd","ef"));
assertThat(collection, hasItems("cd", "ab","ef")); // 錯(cuò)誤
assertThat(collection, hasItems("ab","cd")); // 錯(cuò)誤
assertThat(collection, containsInAnyOrder("cd", "ab","ef")); //正確,不區(qū)分順序
- 集合為空檢查
List<String> collection = Lists.newArrayList("ab","cd","ef");
assertThat(collection, empty()); // false, 用于檢查集合類型
- 數(shù)組為空檢查
String[] array = new String[] { "ab" };
assertThat(array, emptyArray()); // false
5. 總結(jié)
核心:
anything - 總是匹配,如果你不關(guān)心測試下的對(duì)象是什么是有用的
describedAs - 添加一個(gè)定制的失敗表述裝飾器
is - 改進(jìn)可讀性裝飾器 - 見下 “Sugar”
邏輯:
allOf - 如果所有匹配器都匹配才匹配,像Java里的&&
anyOf - 如果任何匹配器匹配就匹配,像Java里的||
not - 如果包裝的匹配器不匹配器時(shí)匹配,反之亦然
對(duì)象:
equalTo - 測試對(duì)象相等使用Object.equals方法
hasToString - 測試Object.toString方法
instanceOf, isCompatibleType - 測試類型
notNullValue, nullValue - 測試null
sameInstance - 測試對(duì)象實(shí)例
Beans:
hasProperty - 測試JavaBeans屬性
集合:
array - 測試一個(gè)數(shù)組元素test an array’s elements against an array of matchers
hasEntry, hasKey, hasValue - 測試一個(gè)Map包含一個(gè)實(shí)體,鍵或者值
hasItem, hasItems - 測試一個(gè)集合包含一個(gè)元素
hasItemInArray - 測試一個(gè)數(shù)組包含一個(gè)元素
數(shù)字:
closeTo - 測試浮點(diǎn)值接近給定的值
greaterThan, greaterThanOrEqualTo, lessThan, lessThanOrEqualTo - 測試次序
文本:
equalToIgnoringCase - 測試字符串相等忽略大小寫
equalToIgnoringWhiteSpace - 測試字符串忽略空白
containsString, endsWith, startsWith - 測試字符串匹配