Selenium Web Driver自动化测试(java版)系列上半部分(12) - java类库和java文档介绍,以及String字符串举例

初识java那篇文章里我说类库(library)是包含了开发人员已经开发好的模块,到时候你直接用就行了。你不用自己再编写了。这就好比你游戏里的外挂或秘籍,直接一用省了不少事。从字面上理解,类库类库,它就像是一个仓库,仓库里有许多个已经开发好的类。

这些类不同于我们前几篇写的网红类等等,它们是真正为了解决实际生活需要而提供的类,应用范围很广,有些甚至java程序员们每天都要用到。上篇文章介绍了面向对象以及封装的概念时引入了一个重要的概念叫包,类库其实就是包的一种形式。有人说我怎么找到这些类库,答案就是查询java文档。由于java的开发公司Sun已经被甲骨文收购,所以在甲骨文的官网就可以找到java文档。百度输入java documentation不难找到Java SE APIs & DocumentationOracle这个页面,打开就是按版本区分的java文档:

每次新版本的jdk和jre都有一些更新,所以java开发者为每一个版本都写了一个文档。其实大部分的内容都是一样的,但出于保险,我建议你下载的是哪个版本的jdk/jre就用哪个版本的文档。我用的java版本是8,打开后是这个样子:

文档分三个区域,看见左上角的packages了么?这些包都是按照我们上篇文章介绍包时的结构排列的:

随便点击一个包就会响应显示左下角该包里所有的类,比如java.lang这个包:

其实除了类(classes)还有接口(interfaces),异常(exceptions),枚举(enums)等等,以后我们都会提到,现在暂时先关注类就行了。你看,每个包里都有很多个已经写好的类,刚才我说类库其实就是包的一种形式就是这么个意思。这些类有些彼此紧密相连,有些关系不大,但它们都被封装在同一个包里。随便点击一个类,右边的区域是该类的详细用法,里面有它所包含声明过程,成员方法,构造函数等等:

你不用关心每一个方法里面具体的代码是什么,它们已经经过了严格的测试,我们只需要知道怎么用就可以了。当然,如果你有兴趣,觉得这些类库都不能满足你的需求,也可以自己写个类库然后发到网上:)

现在示范怎么用这个文档,我就用字符串(String)这个最简单但又用到最多的一个类给大家举例,并且介绍一下这个类中几个常用的方法。之前说java数据类型分为基本型和复杂型,字符串型就属于复杂型。之前文章举的例子里已经用过了字符串,相信大家也不陌生了。字符串本身也是一个类,我们看看它的定义:

字符串属于java.lang这个包,lang是语言language的简写,其实它指的就是我们平时用的普通文本。之前讨论的一种基础类型数据叫字符(char),那么把很多个字符放到一起就是一个字符串(String)。既然String本身是一个类,那我们就可以用实例化对象的方式声明:

但字符串比较特殊,也可以用值类型方式声明:

注意,字符用单引号,字符串用双引号。如果现在打印str,得到的就是abc。既然是普通文本,那我们可以把abc和别的文字写在一起,中间用加号隔开,比如:

继续往下看String类的成员方法,我们讨论几个典型又常用的。第一个是charAt(int index):

用字符串对象调用这个方法返回给定位置的字符,左边的char指的是返回值的类型。参数就是给定位置,整型数据,从0开始,比如我写str.charAt(2),返回的就是目标字符串第三个位置的字符,也就是字母“u”:

注意,空格,换行符以及标点符号也是字符,也是字符串的一部分,不要忽略它们。

第二个是concat(String s):

它用于把参数字符串连在目标字符串后面,组成一个新的字符串。所以它的返回类型也是String:

上面程序把". nice to meet you."连在"you are a tester, me too"后面,打印出来的结果就是"you are a tester, me too. nice to meet you."。简单吧?文档就是这么用,先琢磨下你的程序要做什么,然后查查文档看看有没有现成的方法。

第三个是contains(CharSequence s):

这个方法用于判断目标字符串是否包含一个参数字符串,包含返回true,不包含返回false:

很显然,str1包含str,打印出"str1包含str"。

下一个是length():

返回的是整个字符串的长度,也就是有多少个字符:

打印出来应该是24。你可以数数,这个例子也能证明空格和标点也是字符串一部分。

下一个是replace(char oldChar, char newChar):

它是一个替换方法,接受两个参数,第一个是目标字符串里的一个子字符串,第二个是一个新字符串。这个方法用于把目标字符串里所有出现的给定子字符串换成新的子字符串,并返回最终字符串:

我把目标字符串的tester子串替换成了developer,执行程序的结果就是打印出"you are a developer, me too."。注意,这里是把目标字符串里的所有子串都替换成新串,如果“tester”出现不止一次,那就全都要被替换成“developer”。

下一个是split(String regex):

该方法这篇不讲,因为我们还没介绍数组。不过这个方法很重要,也是经常用到的。我在介绍数组那篇文章里已经补上了这部分,想学的朋友可以先去看。

下一个是substring(int beginIndex):

这个方法从给定的字符位置开始截取剩余的字符串并返回。比如从第6个位置开始截取,结果就是"re a tester, me too":

最后一个是equals(Object obj):

用于比较两个字符串是否相等,返回值也是布尔类型。有人说不对呀,相等不是“==”吗?注意,这个方法和“==”是有区别的,看下面的例子:

用equals()的返回的是true,但用“==”的返回的是false,原因就在于equals()比较的是两个字符串的值,而“==”比较的是两个字符串的地址:

两个字符串的值都是abc,但毕竟是两个字符串,地址空间不会是一样的(随便写的,0x10和0x11)。这就是两者的区别,在比较之前要搞清楚你比较的是哪一个。这点就是引用类型比较讨厌的地方,值类型就不会有这个问题,空间里直接存值,用“==”比较的也是值,没地址来捣乱:

就先介绍这么多,剩下的大家可以根据文档试试。String这个类所在的类库java.lang不需要import,但很多其实都需要,在项目开头要写"import 包名", 就像上篇文章里封装的那个例子类似。如果你用eclipse开发不用担心这个问题,需要时它会自动提示你添加。

再简单介绍一个类,自动化测试中会用到,但比较特别,叫Scanner。我们之前的所有例子都是直接从命令行终端打印出结果,但如果我们想往里面输入点东西呢?那就要借助这个类。Scanner属于java.util这个类库,它允许用户从终端输入一些文字。声明方式是:

Scanner的构造函数有一个参数叫System.in,代表的就是从终端输入。打印时我们总写System.out.println,输出是out,输入是in。创建出来的Scanner对象就可以依靠调用它的一系列方法来执行输入:

比如nextInt()指的是让你输入一个整型,nextFloat()是输入一个浮点型,nextDouble()是输入一个长整型,next()是输入一个字符串:

把上面的代码合并。每个小程序如下:

整型:

浮点型:

字符串型:

输入一个值时,按回车就会输出你刚输入的东西。注意,字符串那个例子加了一句scan.useDelimiter("\n")。如果不加这句话,现在输入的是"I love you",中间有空格,那按完回车只能返回"I",因为空格会被自动当成分隔符直接把后边的东西去掉。Delimiter是分隔符的意思,"\n"代表换行符,useDelimiter("\n")的意思就是只有当敲换行符,也就是回车键时才表示结束输入。

Scanner也允许类型自动转换。比如要求你输入一个浮点数,但你输的是整型,没问题。但反过来就不行,因为由高到低需要强制转换:

这就是Scanner类的一些简单讲解,自动化测试时有时需要输入验证码,我们就可以用这种方式,到时再细讲。

有人把类库也叫做API,有人说不对,而且在网上讨论类库和API的区别。在我看来没必要太过于细枝末节,你可以把它们简单理解成是“已开发好可以立即使用的包和类的集合”。

真正用java写代码时有可能需要各种各样的类,随着我们练习越来越多,很多方法都可以慢慢记住。但毕竟java类库太多,全都记住不太可能,所以要养成看文档的习惯,根据自己项目的要求,找到对应的、需要的类和方法。

这篇文章的源代码是LibraryNStringLibraryNScanner

本篇知识点及注意事项:
1. 类库(library)是包(packages)的一种表现形式,一个包里有很多类,每个类中有可以直接使用的成员方法。

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

推荐阅读更多精彩内容