美文网首页软件测试程序员
Selenium Web Driver自动化测试(java版)系

Selenium Web Driver自动化测试(java版)系

作者: 马可吃菠萝 | 来源:发表于2018-08-03 09:13 被阅读0次

这篇文章介绍一下文本框(TextBox)的操作。文本框用于用户输入信息,一般来说,文本框都有以下五种操作:

1. 检查是否显示;
2. 输入文本;
3. 取值;
4. 清除文本;
5. 判断是否启用;

第1个和上篇文章介绍的普通文本一样,都是用isDisplayed()方法。先验证是否存在,确认存在后才可以判断是不是显示,显示为true,不显示为false,如果压根都不存在则抛出异常。

第2个是个新的知识点。Selenium在定位控件后使用sendKeys(String str)作为从键盘输入的方法,接收一个字符串参数作为输入的内容,也就是说找到文本框后使用该方法可以在该文本框中输入值。我们的示例网页webelements.html上有个文本框,先定位它:

演示一下:新建java项目SeleniumTextBox -> 包com.test -> Test.java,把driver声明配置好,把webelement.html网页全屏打开:

找到文本框后我们创建一个对象textBox接收返回值,然后使用sendKeys方法。随便输入一个字符串:

我后面又让系统停留5秒钟,为了能让大家在运行时有足够的时间看到结果。当然,你如果程序最后不写driver.quit()或是driver.close()的话那就没必要写Thread.sleep()了,反正浏览器不关。

第3个取值。先看文本框的结构:

value代表文本框里面的内容,也就是它的值。同时,value是作为属性存在的,所以不是用getText(),而是要用到另一个方法:getAttribute(“value”)。前面咱们讲定位器时用按钮做例子时说过这个方法。如果你仔细比较文本框和按钮的html可以发现它们很像,只不过文本框是type=”text”,按钮是type=”submit”或是type=”button”。用textBox.getAttribute(“value”)取值:

第4个是清除文本,非常简单,用clear()方法,目的是把文本框里的内容清除掉:

运行程序的时候就可以看到输入的文本又被清除掉了。这个方法比较多地用在对同一个文本框进行多次输入。最后一个操作是检查是否启用。这是什么意思呢?注意,默认情况下网页元素都是启用状态,文本框是可以随意输入东西的。但是也有被禁用的时候,如果在写一个”disabled”变成以下格式时就不能输入东西了:

有时候我们在做测试时明明一个文本框出于某种目的或在某种情况下已经被禁用了,但我们偏偏要输入,那就会产生错误。所以咱们有时要先判断一下控件是否在启用状态。对此Selenium为WebElement对象设计了一个方法叫isEnabled()可以用来进行判断:这个方法返回的是布尔值。由于这个文本框是启用状态,所以返回true。如果要是禁用的话返回的就是false。同样,isEnabled()和isDisplayed()一样,有一个大前提,那就是在当前页面上存在,否则就会直接抛出异常,也就轮不到后面的判断了。

对于文本框,如果我们知道要输入的数据,比如上面的“marco”,那用sendKeys()方法操作起来非常简单,因为它是个确定的数据,跑不了;但如果是随机的一个数据呢?比如验证码呢?程序运行起来可是不知道当时要输入什么的,因为每加载一次页面验证码都会换一个新的。对于这个问题网上有好几个处理的方法,这里我介绍两种。我给大家准备的示例网页中有一个叫captcha.html的页面,这就是一个简单的验证码小案例,是我在网上抄的,很感谢写这个例子的人,省去了不少准备素材的时间。打开这个网页,网址是http://cslm-test.com/webapps/captcha/captcha.html

如果什么都不输直接点确定按钮,会弹出对话框“请输入验证码”;如果输错了会弹出“验证码输入有误”;如果输入正确会弹出“验证码正确”。

第一种方法很简单,核心就是一个字 --- 等。在程序执行验证码输入这步之前用Thread.sleep()等它个几百上千秒的,当然了,不用这么长。然后呢,你用手一个一个敲入验证码,毕竟时间够长,只要你不输错,时间一到,程序继续执行,万事大吉。

但这种方法有两个问题。第一,你的时间输的一定要足够长,但又不能太长。太短了你没输完呢程序已经要继续执行了,肯定fail。太长了你输完了都刷了遍朋友圈了,抬头一看,程序还没动呢,费时费力;第二,理论上讲,程序启动后,在自动化的过程中最好不要碰被测的网页。被selenium启动的网页就好比是selenium的女朋友,不属于你家鼠标。人家疼得好好的,你非要插一杠子让你家鼠标碰人家小媳妇,selenium肯定不高兴,出了难以解释的问题说不清楚。

那不碰怎么整?这就是我想说的第二种方式。你自己不碰网页但你可以让别的媒介把数据传给网页呀。还记得咱们介绍java类库那篇说过如何让用户从终端输入数据吗?是不是用Scanner那个类?猜没猜到点什么?没错,咱们的思路就是用Scanner类强迫程序停下等待用户输入,待你输完验证码并按下回车键后,程序把你输入的值传给网页。这样等待时间完全取决于你,什么时候输入按回车什么时候程序继续。而且你碰的是终端,没碰网页,selenium不生气。来,走一个:

再新建一个叫SeleniumCaptcha的java项目 -> 包com.test -> Test.java,把driver声明配置好,把captcha.html网页全屏打开:

创建Scanner类的对象,以及一个叫captcha的字符串用来存用户从终端输入的验证码:

用户输完验证码并按下回车键后,存有输入内容的字符串captcha将会作为参数放入sendKeys()方法中,Selenium在网页上找到id为“inputCode”的文本框并执行验证码输入步骤。

注意这个地方我把“定位(WebElement w = driver.findElement())”和“输入(w.sendKeys())”两个步骤合成了一步,不要不认识,java基础知识,之前都说过。最后点击按钮查看结果:

运行程序,终端输入验证码,按回车。Selenium执行后续操作:

再提醒一遍,是在Eclipse终端输入验证码,不是网页上输入,别搞错。这就是验证码的大致操作,它是文本框操作的一种特殊情况,在测试中咱们也经常会遇到,请掌握。以上就是文本框(TextBox)的大致操作,这篇文章的源代码是SeleniumTextBoxSeleniumCaptcha这两个小项目。

本篇知识点及注意事项:
1. 验证码是文本框的一种特殊情况,思路是用Scanner类强迫程序停下等待用户输入,待你输完验证码并按下回车键后,程序把你输入的值传给网页。

相关文章

网友评论

    本文标题:Selenium Web Driver自动化测试(java版)系

    本文链接:https://www.haomeiwen.com/subject/wlzevftx.html