上篇文章讲了文本框(TextBox),这篇讲按钮(button),因为它俩的html代码比较像:
你看,除了type不一样,别的都差不多。按钮的type可以是button,也可以是submit。我们一会儿说它俩的区别,先说按钮的操作。自动化测试中对按钮最常用的的操作如下:
1. 是否在当前页面显示;
2. 是否启用/禁用;
3. 点击。
前两个一个是isDisplayed, 第二个是isEnabled,都说过了不说了。主要介绍第三个。第三个是点击,方法名是click()。其实之前我们讲driver时已经用过click()这个方法了,看起来肯定不陌生,当时点击的是链接,这次点按钮。简单演示一下,新建一个叫SeleniumButton的java项目 -> 包com.test -> Test.java,添加selenium jar包,把driver声明配置好,把示例网页http://cslm-test.com/webapps/elements/webelements.html 全屏打开,然后点击按钮:
我们点击的是那个name=”confirm”的按钮,然后弹出一个对话框:
这就是点击。不过需要注意的是,一般来说点击都会让网页跳转,而跳转就需要一段时间等待,所以点击经常会造成不同步的情况而报错(比如网页还在跳转过程中但程序已经开始定位下一个页面的控件了)。最好在跳转时间长的点击步骤后加上Thread.sleep()来解决这个问题。
刚才的确定按钮它的type=submit,其实如果是type=button也是一样的。那它俩的区别到底是什么呢?这里再看一个例子。打开浏览器访问咱们另一个示例网页http://cslm-test.com/webapps/login/formlogin.html ,里面有两个按钮,一个类型是button,另一个是submit:
这个页面都熟悉吧?标准的登录界面。只不过我们这里有两个登录按钮。你按按试试看谁管用。我们发现只有类型是submit的按钮会让网页跳转到formloginsuccess.html页面,也就是登陆成功的页面。
我们还发现,这段极其短小的源代码还包括了一个叫form的标签,form就是表单。我们看到表单里有个属性叫action=”formloginsuccess.html”,这句代表跳转到哪个页面。当type=submit的按钮被点击后,表单内所有的元素都会被提交/发送到服务器,再由服务器转发到新的页面。Submit的英文涵义就是提交。当然,这个网页比较简单,但是麻雀虽小五脏俱全,点击时表单里的四个主要元素– 用户名文本框,密码文本框,以及两个按钮都会被提交到formloginsuccess.html这个页面:
拿到这些值后,formlogin.html再响应进行处理。因为咱们这套教程的重点不是web程序开发,所以不深究网页跳转的原理,所以大家也别纠结提交之后的数据处理过程。大家只要记住,当点击类型为”submit”的按钮时,网页会跳转并把表单里的所有元素提交到服务器,服务器再转发到指定的页面即可。一个表单里可以有各种类型的控件,可以包含文本框按钮链接下拉列表单复选等等等等。
相反,type=button的按钮则并不会让网页跳转,也不会把表单内元素提交。
现在咱们把这个提交过程写成自动化程序,新建一个叫SeleniumForm的java项目 -> 包com.test -> Test.java,添加selenium jar包,把driver声明配置好,把formlogin.html网页全屏打开:
假如我们的test case是:
1. 输入用户名:marco;
2. 输入密码:123;
3. 点击登录按钮。
有了之前几篇的铺垫,写起来不难,代码如下:
以上就是按钮的使用、按钮在表单里的作用以及两种按钮的区别。其实表单还有个福利,注意点击按钮步骤driver.findElement(By.id(“type_submit”)).click(),我们可以把这句话替换成另外一句:pwdTextBox.submit():
我们运行程序,发现页面竟然也跳转了!而且我还可以告诉大家表单内的元素也都被提交了。可我们整个过程并没有点击按钮!而是仅仅用密码文本框对象调用了submit()方法。为什么这样也可以呢?其实,submit()是专门为表单设计的方法,它规定只要是表单内的元素都可以使用该方法对该表单内所有元素进行提交。注意,是任意一个,就可以把整个表单的所有内容提交。大家可以用用户名文本框对象usernameTextBox试试,这里就不做演示了。
以上就是按钮和表单的基本操作,这篇文章的源代码是SeleniumButton和SeleniumForm。下一篇介绍单选按钮和复选框。
本篇知识点及注意事项:
1. 类型是submit的按钮会让网页跳转,类型是button的不会。
2. 表单提交时会把所有元素的值提交到服务器。