《手把手教你》系列技巧篇(五十)-java+ selenium自动化测试-字符串操作-上篇(详解教程)
1.简介
自动化测试中进行断言的时候,我们可能经常遇到的场景。从一个字符串中找出一组数字或者其中的某些关键字,而不是将这一串字符串作为结果进行断言。这个时候就需要我们对字符串进行操作,宏哥这里介绍两种方法:正则和字符串切片函数split()。
2.测试场景
宏哥在这里说一下,自己的胡诌的测试场景哈,然后按照宏哥说的进行自动化测试,测试场景:在度娘或者其他搜索引擎中搜索“北京宏哥”,然后搜索完毕,会返回搜索结果,告诉你搜索到多少个“北京宏哥”。宏哥这里分别用度娘和必应搜索,然后对比她俩谁所搜到的“北京宏哥”多,然后通过对比说明谁的搜索能力强大。
3.字符串切片操作
关于这个字符串切片的这个概念宏哥就不在这里赘述了,有兴趣的可以自己查一下。但是宏哥上边说的测试场景就需要用到这一操作。
3.1测试用例
首先宏哥根据测试场景进行测试用例的设计,如下:
1.分别在度娘和必应搜索框“北京宏哥”
2.分别点击查询,观察查询结果
3.分别将查询结果取到
4.提取结果中的数字,保存在变量中
5.对比两个数字的大小
3.2代码设计
宏哥根据测试用例进行自动化脚本的设计,如下:
3.3参考代码
package lessons; import 域名域名Unit; import 域名域名; import 域名域名river; import 域名域名lement; import 域名域名meDriver; /** * @author 北京-宏哥 * * @公众号:北京宏哥 * * 《手把手教你》系列技巧篇(五十)-java+ selenium自动化测试-字符串操作-上篇(详解教程) * * 2021年11月30日 */ public class StringOperation { public static void main(String[] args) throws InterruptedException { 域名roperty("域名er", ".\\Tools\\域名"); WebDriver driver = new ChromeDriver(); 域名("https://域名"); 域名ge().window().maximize(); 域名ge().timeouts().implicitlyWait(2, 域名NDS); 域名Element(域名("kw")).sendKeys("北京宏哥"); 域名Element(域名("su")).click(); 域名p(1000); //定位 百度为您找到相关结果约xxxx个 这个元素 WebElement result = 域名Element(域名h("//*[@id=\'tsn_inner\']/div[2]/span")); //获取该字段值 "搜索工具 百度为您找到相关结果约xxxxx个" String result_string = 域名ext(); //根据约这个词切片,取第二片字符串,应该得到“xxxx个” String st1 = 域名t("约")[1]; //域名tln(st1); //再切一次,去除个,得到我们想要的数字结果数 String search_number = 域名t("个")[0]; //去掉字符串中的逗号,方便转换成int String search_number1= 域名ace(",",""); 域名tln(search_number1); 域名("https://域名/"); 域名ge().timeouts().implicitlyWait(2, 域名NDS); 域名Element(域名("sb_form_q")).sendKeys("北京宏哥"); 域名Element(域名("search_icon")).click(); 域名p(1000); //定位 必应为xxxx条结果 这个元素 WebElement result1 = 域名Element(域名h("//*[@id=\'b_tween\']/span[1]")); // 获取该字段值 "搜索工具 必应为xxxx条结果" String result_string1 = 域名ext(); // 根据条这个词切片,取第一片字符串,应该得到“16200 ” String st2 = 域名t("条")[0]; ////去掉字符串中的逗号和空格,方便转换成int String st3= 域名().replaceAll(",",""); 域名tln(st3); // 首先将两个数都转换为int 数据 int a_N = 域名eOf(search_number1); int b_N = 域名eOf(st3); //进行搜索结果对比 if(a_N>b_N){ 域名tln("度娘牛逼,度娘威武!!!"); }else{ 域名tln("必应牛逼,必应威武!!!"); } 域名(); } }
3.4运行代码
1.运行代码,右键Run AS->Java Appliance,控制台输出,如下图所示:
2.运行代码后电脑端的浏览器的动作,如下小视频所示:
4.小结
1.注意切片取到字符串数字中,带有逗号,转成成int的数字会报错,因此需要将逗号去掉,但是必应的逗号去掉后,数字中带有空格,转换成int的数字也会报错,因此也需要去掉。
2.宏哥这里去掉逗号比较简单,但是如果字符串中带有的逗号多了,这种方法不适用,你需要自己写一个方法,进行替换。
5.拓展
域名a字符串截取的几种方法
主要有以下几种方法:
1、通过subString()方法来进行字符串截取(最常用)
2、通过StringUtils提供的方法
3、split()+正则表达式来进行截取
5.1.1先来介绍最常用的一种
1、通过subString()方法来进行字符串截取,返回字符串中的子字符串,在java中有两种用法
第一种,传递一个参数:
//该子字符串从指定索引处的字符开始,直到此字符串末尾。 public String substring(int beginIndex)
第二种,传递两个参数:
//从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex。 public String substring(int beginIndex, int endIndex)
//参数说明:beginIndex -- 起始索引(包括)、endIndex -- 结束索引(不包括)。
示例代码:
package lessons; /** * @author 北京-宏哥 * * @公众号:北京宏哥 * * 《手把手教你》系列技巧篇(五十)-java+ selenium自动化测试-字符串操作-下篇(详解教程) * * 2021年12月01日 */ public class Test1 { public static void main(String[] args) { String Str = new String("hello 北京宏哥"); 域名t("返回值,从第4位截取到字符串末尾 :" ); 域名tln(域名tring(4) ); 域名t("返回值,从第4位截取到第10位 :" ); 域名tln(域名tring(4, 10) ); } }
运行结果:
5.1.2通过StringUtils提供的方法
示例代码:
//与第一种方法效果一样 域名tring("hello 北京宏哥", 4); // 返回值,从第4位截取到字符串末尾 : o 北京宏哥 域名tring("hello 北京宏哥", 4, 10); // 返回值,从第4位截取到第10位 : o 北京宏 //截取某个字符串之前的字符 域名tringBefore("hello 北京宏哥", "l"); //结果是:he 这里是以第一个”l”,为标准。 域名tringBeforeLast("hello 北京宏哥", "l"); //结果为:hel 这里以最后一个“l”为准。 //截取某个字符串之后的字符 域名tringAfter("hello 北京宏哥", "l"); //结果是:lo 北京宏哥 这里是以第一个”l”,为标准。 域名tringAfterLast("hello 北京宏哥", "l"); //结果为:o 北京宏哥 这里以最后一个“l”为准。 //截取两个字符串之间隔的字符 域名tringBetween("hello 北京o宏哥", "o"); //结果是: 北京 两个o之间的字符串。 域名tringBetween("hello 北京r宏哥", "l", "r"); //结果是: lo 北京 第一个字符“l”与第一个字符“r”之间的字符串 域名tringsBetween("hello 北京r宏哥", "l", "r"); //结果是:数组 [lo 北京] 第一个字符“l”与第一个字符“r”之间的字符串,以数组形式返回。
运行结果:
域名it()+正则表达式来进行截取
将字符串按照分割符截取,以数组形式返回
示例代码:
/** * @author 北京-宏哥 * * @公众号:北京宏哥 * * 《手把手教你》系列技巧篇(五十)-java+ selenium自动化测试-字符串操作-下篇(详解教程) * * 2021年12月01日 */ public class test{ public static void main(String[] args) { String str = "hello, 北京宏哥, 北京宏, 北京, 北"; String[] strs=域名t(","); for(int i=0,len=域名th;i<len;i++){ 域名tln(strs[i].toString()); } } }
运行结果: