《手把手教你》系列技巧篇(五十)java+ selenium自动化测试字符串操作上篇(详解教程) 北京

1.简介

自动化测试中进行断言的时候,我们可能经常遇到的场景。从一个字符串中找出一组数字或者其中的某些关键字,而不是将这一串字符串作为结果进行断言。这个时候就需要我们对字符串进行操作,宏哥这里介绍两种方法:正则和字符串切片函数split()。

2.测试场景

宏哥在这里说一下,自己的胡诌的测试场景哈,然后按照宏哥说的进行自动化测试,测试场景:在度娘或者其他搜索引擎中搜索“北京宏哥”,然后搜索完毕,会返回搜索结果,告诉你搜索到多少个“北京宏哥”。宏哥这里分别用度娘和必应搜索,然后对比她俩谁所搜到的“北京宏哥”多,然后通过对比说明谁的搜索能力强大。

3.字符串切片操作

关于这个字符串切片的这个概念宏哥就不在这里赘述了,有兴趣的可以自己查一下。但是宏哥上边说的测试场景就需要用到这一操作。

3.1测试用例

首先宏哥根据测试场景进行测试用例的设计,如下:

1.分别在度娘和必应搜索框“北京宏哥”

2.分别点击查询,观察查询结果

3.分别将查询结果取到

4.提取结果中的数字,保存在变量中

5.对比两个数字的大小

3.2代码设计

 宏哥根据测试用例进行自动化脚本的设计,如下:

3.3参考代码

package lessons;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

/**
 * @author 北京-宏哥
 * 
 * @公众号:北京宏哥
 * 
 * 《手把手教你》系列技巧篇(五十)-java+ selenium自动化测试-字符串操作-上篇(详解教程) 
 *
 * 2021年11月30日
 */
public class StringOperation {
    
public static void main(String[] args) throws InterruptedException {
        
        System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");
        
        WebDriver driver = new ChromeDriver();
        
        driver.get("https://www.baidu.com");
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
        
        driver.findElement(By.id("kw")).sendKeys("北京宏哥");
        driver.findElement(By.id("su")).click();
        
        Thread.sleep(1000);
        
        //定位 百度为您找到相关结果约xxxx个 这个元素
        WebElement result = driver.findElement(By.xpath("//*[@id='tsn_inner']/div[2]/span"));
        
        //获取该字段值  "搜索工具 百度为您找到相关结果约xxxxx个"
        String result_string = result.getText();
        //根据约这个词切片,取第二片字符串,应该得到“xxxx个”
        String st1 = result_string.split("约")[1];
        //System.out.println(st1);
        
        //再切一次,去除个,得到我们想要的数字结果数
        String search_number = st1.split("个")[0];
        //去掉字符串中的逗号,方便转换成int
        String search_number1= search_number.replace(",","");
        System.out.println(search_number1);
        
        driver.get("https://cn.bing.com/");
        driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
        
        driver.findElement(By.id("sb_form_q")).sendKeys("北京宏哥");
        driver.findElement(By.id("search_icon")).click();
        
        Thread.sleep(1000);
        
        //定位 必应为xxxx条结果 这个元素
        WebElement result1 = driver.findElement(By.xpath("//*[@id='b_tween']/span[1]"));
        
        // 获取该字段值  "搜索工具 必应为xxxx条结果"
        String result_string1 = result1.getText();
        // 根据条这个词切片,取第一片字符串,应该得到“16200 ”
        String st2 = result_string1.split("条")[0];
        ////去掉字符串中的逗号和空格,方便转换成int
        String st3= st2.trim().replaceAll(",","");
        System.out.println(st3);
        
        // 首先将两个数都转换为int 数据
        int a_N = Integer.valueOf(search_number1);
        int b_N = Integer.valueOf(st3);
        //进行搜索结果对比
        if(a_N>b_N){
            System.out.println("度娘牛逼,度娘威武!!!");
        }else{
            System.out.println("必应牛逼,必应威武!!!");
        }
        
        driver.quit();
        
    }

}

3.4运行代码

1.运行代码,右键Run AS->Java Appliance,控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作,如下小视频所示:

4.小结

1.注意切片取到字符串数字中,带有逗号,转成成int的数字会报错,因此需要将逗号去掉,但是必应的逗号去掉后,数字中带有空格,转换成int的数字也会报错,因此也需要去掉。

2.宏哥这里去掉逗号比较简单,但是如果字符串中带有的逗号多了,这种方法不适用,你需要自己写一个方法,进行替换。

5.拓展

5.1java字符串截取的几种方法

主要有以下几种方法:

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 北京宏哥");  
        System.out.print("返回值,从第4位截取到字符串末尾 :" );
        System.out.println(Str.substring(4) );
     
        System.out.print("返回值,从第4位截取到第10位 :" );
        System.out.println(Str.substring(4, 10) );
    }

}

运行结果:

5.1.2通过StringUtils提供的方法

示例代码:

//与第一种方法效果一样
StringUtils.substring("hello 北京宏哥", 4);     // 返回值,从第4位截取到字符串末尾 : o 北京宏哥
StringUtils.substring("hello 北京宏哥", 4, 10); // 返回值,从第4位截取到第10位    :   o 北京宏

//截取某个字符串之前的字符
StringUtils.substringBefore("hello 北京宏哥", "l"); 
//结果是:he          这里是以第一个”l”,为标准。
StringUtils.substringBeforeLast("hello 北京宏哥", "l");
//结果为:hel        这里以最后一个“l”为准。

//截取某个字符串之后的字符
StringUtils.substringAfter("hello 北京宏哥", "l");
//结果是:lo 北京宏哥   这里是以第一个”l”,为标准。
StringUtils.substringAfterLast("hello 北京宏哥", "l");
//结果为:o 北京宏哥    这里以最后一个“l”为准。

//截取两个字符串之间隔的字符
StringUtils.substringBetween("hello 北京o宏哥", "o");    
//结果是: 北京  两个o之间的字符串。   
StringUtils.substringBetween("hello 北京r宏哥", "l", "r"); 
//结果是: lo 北京   第一个字符“l”与第一个字符“r”之间的字符串   
StringUtils.substringsBetween("hello 北京r宏哥", "l", "r");
//结果是:数组 [lo 北京]   第一个字符“l”与第一个字符“r”之间的字符串,以数组形式返回。   

运行结果:

5.1.3split()+正则表达式来进行截取

将字符串按照分割符截取,以数组形式返回

示例代码:

/**
 * @author 北京-宏哥
 * 
 * @公众号:北京宏哥
 * 
 * 《手把手教你》系列技巧篇(五十)-java+ selenium自动化测试-字符串操作-下篇(详解教程) 
 *
 * 2021年12月01日
 */
public class test{
    
    public static void main(String[] args) {
        String str = "hello, 北京宏哥, 北京宏, 北京, 北";
        String[]  strs=str.split(",");
        for(int i=0,len=strs.length;i<len;i++){
            System.out.println(strs[i].toString());
        }
    }

}

运行结果:



    感谢您花时间阅读此篇文章,如果您觉得这篇文章你学到了东西也是为了犒劳下博主的码字不易不妨打赏一下吧,让博主能喝上一杯咖啡,在此谢过了!
    如果您觉得阅读本文对您有帮助,请点一下左下角“推荐”按钮,您的将是我最大的写作动力!另外您也可以选择关注我,可以很方便找到我!
    本文版权归作者和博客园共有,来源网址:https://www.cnblogs.com/du-hong 欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利!
个人微信公众号 个人微信
原文地址:https://www.cnblogs.com/du-hong/p/15602498.html