Chinaunix首页 | 论坛 | 博客
  • 博客访问: 121773
  • 博文数量: 14
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 184
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-01 23:15
个人简介

我只是一个喜欢开发的测试,喜欢测试的开发,喜欢每天都知道得更多一些,更深入一些的感觉。。。。。

文章分类

全部博文(14)

文章存档

2015年(5)

2014年(2)

2013年(7)

分类: Java

2015-08-13 21:23:38

3.  WebDriver中点击按钮、连接无效问题

 

之前在写一个测试用例的时候,就有发现点击提交按钮不起作用,今天又遇到点击链接也不起作用的情况。经过一些尝试,暂时已通过其他方式解决。

 

 

1.       软件版本

1)      操作系统Win7 旗舰版(64)

2)      JDK1.7

3)      EclipseMars Release (4.5.0) Eclipse Java EE IDE for Web Developers

4)      Eclipse TestNG插件org.testng.eclipse_6.9.5.201506120235

5)      Webdriverselenium-java-2.46.0

6)      IEDriverServer.exe

 

 

2.       被测对象说明

为了说明问题,我以一个简单的登陆流程作为测试对象:登陆页面,如果用户密码正确则提交后跳转到登陆成功页面,否则跳转到登陆失败页面,登陆失败页面有一个链接,点击后跳转到登陆界面。下面是各页面的代码。

 

2.1   登陆页面

点击(此处)折叠或打开

  1. <%@ page language="java"%>
  2. <%@ page language="java" contentType="text/html; charset=UTF-8"%>

  3. <% String path = request.getContextPath(); %>

  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " style="color:#0000CC;">>
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8. <title>系统登录</title>
  9. </head>
  10. <body>
  11.     <center>
  12.         <h1>系统登录</h1>
  13.         <hr>
  14.         <form name="loginForm" action="<%=path%>/login.action" method="post">
  15.             用户名:<input type="text" name="username" /><br>
  16.             密码:<input type="password" name="password" /><br>
  17.             <input type="submit" value="登录" id="btnLogin" name="btnLogin" /><br>
  18.         </form>
  19.     </center>
  20. </body>
  21. </html>


 

2.2   登陆成功页面

点击(此处)折叠或打开

  1. <%@ page language="java"%>
  2. <%@ page language="java" contentType="text/html; charset=UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " style="color:#0000CC;">>
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>登录成功</title>
  8. </head>
  9. <body>
  10.     <center>
  11.         <h1>登录成功</h1>
  12.         <hr>        
  13.     </center>
  14. </body>
  15. </html>
 


2.3   登陆失败页面

点击(此处)折叠或打开

  1. <%@ page language="java" import="java.util.*"%>
  2. <%@ page language="java" contentType="text/html; charset=UTF-8"%>

  3. <% String path = request.getContextPath(); %>

  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " style="color:#0000CC;">>
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8. <title>登录失败</title>
  9. </head>
  10. <body>
  11.     <center>
  12.         <h1>登录失败</h1>
  13.         <hr>    
  14.         <a class="return" href="<%=path%>/login.jsp">返回</a>    
  15.     </center>
  16. </body>
  17. </html>


 

3.       点击提交按钮不起作用

一开始我针对登陆成功的测试用例是这样写的:

点击(此处)折叠或打开

  1. @Test
  2. public void loginSuccessTest() {
  3.         System.setProperty("webdriver.ie.driver", System.getProperty("user.dir")+"\\IEDriverServer.exe");
  4.         WebDriver driver = new InternetExplorerDriver();
  5.         driver.get(" Login/");
  6.         driver.manage().window().maximize();
  7.         
  8.         CharSequence[] csUser = new CharSequence[1];
  9.         csUser[0] = "admin";
  10.         driver.findElement(By.name("username")).sendKeys(csUser);
  11.         
  12.         CharSequence[] csPW = new CharSequence[1];
  13.         csPW[0] = "123456";
  14.         driver.findElement(By.name("password")).sendKeys(csPW);
  15.         
  16.         driver.findElement(By.name("btnLogin ")).click();
  17.                 
  18.         String excepted = "登录成功";
  19.         String actual = driver.getTitle();
  20.         assertEquals(actual, excepted);
  21.         
  22.         driver.close();
  23.         
  24.         try{
  25.             Runtime.getRuntime().exec("tskill IEDriverServer");
  26.         }catch(IOException ie){
  27.             System.out.println("failed to close IEDriverServer......");
  28.             ie.printStackTrace();
  29.         }
  30. }


但执行这个用例,并没有点击【登录】按钮,执行到填写完两个文本输入框后就停止了,然后就关闭了,用例报错,说获取到的是【系统登录】而非期望的【登陆成功】。但没有报空指针异常,也就是说,submit按钮是获取到的,然后我又把click()改为submit(),即:

点击(此处)折叠或打开

  1. driver.findElement(By.name("btnLogin ")).submit ();


执行后还是一样一样的结果。

 

后来查到一篇关于click()submit()区别的帖子[1],说click()只能用于submit按钮,而submit()可以用于form中的所有element,包括form本身。于是修改代码为:

点击(此处)折叠或打开

  1. driver.findElement(By.name("loginForm ")).submit ();


执行成功。

 

 

4.       点击链接不起作用

在测试失败页面点击【返回】连接跳转回登陆页面的用例中,又遇到点击后不起作用的问题。

点击(此处)折叠或打开

  1. @Test
  2. public void returnTest() {
  3.         System.setProperty("webdriver.ie.driver", System.getProperty("user.dir")+"\\IEDriverServer.exe");
  4.         driver = new InternetExplorerDriver();
  5.         driver.get("Login/login_failure.jsp");
  6.         driver.manage().window().maximize();
  7.         
  8.         driver.findElement(By.xpath("//a[@class='return']")).click();

  9.         String excepted = "系统登录";
  10.         String actual = driver.getTitle();
  11.         assertEquals(actual, excepted);
  12.         
  13.         driver.close();
  14.         
  15.         try{
  16.             Runtime.getRuntime().exec("tskill IEDriverServer");
  17.         }catch(IOException ie){
  18.             System.out.println("failed to close IEDriverServer......");
  19.             ie.printStackTrace();
  20.         }
  21. }



这个就没法用上面submit按钮的方法了,于是我想,如果能将焦点设置到这个连接上,然后按【Enter】键,和点击的效果是一样的。于是我参考了资料[2],将代码修改为:

点击(此处)折叠或打开

  1. WebElement element = driver.findElement(By.xpath("//a[@class='return']"));
  2. Actions action = new Actions(driver);
  3. action.contextClick(element).perform();
  4. element.sendKeys(Keys.ESCAPE);
  5. element.sendKeys(Keys.ENTER);
测试通过!


 

这是用在连接上点击右键,然后按【ESC】键来设置焦点的,没有直接设置焦点的方法。有一点很奇怪,Actionsclick()doubleClick(),及单击和双击都不起作用,只有右键contextClick()起作用。另:Actions类在org.openqa.selenium.interactions下面。

 

还有记得在断言之前,间隔一两秒,不然会没操作完成,就去获取title了,然后断言失败。

 

 

5.       用处理连接的方法处理提交按钮

处理链接的方法,是否能用到submit按钮上呢?试试就知道了

点击(此处)折叠或打开

  1. WebElement element = driver.findElement(By.name("btnLogin"));
  2. Actions action = new Actions(driver);
  3. action.contextClick(element).perform();
  4. element.sendKeys(Keys.ESCAPE);
  5. element.sendKeys(Keys.ENTER);
成功!!!


 

 

参考资料

[1]   Selenium Webdriver submit() vs click() 

[2]  webDriver中如何给元素设置焦点 

阅读(5887) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~