【原创】Selenium学习系列之(四)—Selenium 调试和语言转换
2017-08-24 13:35
239 查看
调试
在录制 Selenium脚本完成后,回放时不一定能顺利执行完成,总会遇到这样或那样的问题,但一般80%的问题都是由于element找不到导致的,这时就需要我们耐心来调试。
以下图为例,脚本执行到verifyText这一步时报错了(报错的步骤会以红色背景色显示),点选【Log】标签,查看log显示 ‘[error] Element //td/table/tbody/tr[2]/td[2]/table/tbody/tr/td/table/tbody/tr[2]/td[2]/font/b not found’, 提示的原因是由于在页面没有找到这个特定元素。一般来说,如果verifyText失败有两种可能,一种是 Locator可能写错了,一种是之前的步骤有错误导致根本没有到达这个页面,所以找不到。
先来验证第一种。我们手动操作login 系统,然后选中这条verifyText命令,点选【find】按钮,若 提示[error] locator not found: //td/table/tbody/tr[2]/td[2]/table/tbody/tr/td/table/tbody/tr[2]/td[2]/font/b, 那么说明我们locator写的不正确,需要改正。否则,命令执行成功并且element以高亮显示,则说明locator没有问题。
排除了第一种可能,开始验证第二种可能。这样的话就需要一步步仔细排查了,首先检查上一个页面是否正确。通过查看我们发现 定义变量时 变量名称为LoginName,而使用时 变量名称误写为Loginname(注意 要区分大小写),这样脚本执行时 LoginID输入的就是空值,导致登录失败,所以element肯定找不到了。
语言转换
Selenium是可以支持多种语言的,包括C#,Java,Python和Ruby等。一般我们录制的是以html形式存储的,但是为了显示直观一般以Table形式显示在UI,但selenium给我们提供了选项可以将其转为C#/Java/Python/Ruby 等。下图所示,是将我们的loginTestCase 转为Java/Junit4脚本,关于Java/Junit4 ,我们在后面的章节讲webdriver时会讲到的,在这边文章的最后 我会附一个 Java/Junit4 test script,大家可以先看一下。
录制生成的Table样式
录制生成的HTML
转换操作
附 Junit4 script:
Java
package common;
import static org.junit.Assert.assertEquals;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
public class Login {
private WebDriver driver;
// login url
private String url = "http://10.237.89.33:58531/ctwicmanage/login.jsp";
// login successfull page
private String loginUrl = "http://10.237.89.33:58531/ctwicmanage/siteLogon.eppic";
// The main page
private String mainUrl = "http://10.237.89.33:58531/ctwicmanage/main.eppic";
// login username and password
/*private String uname = "global";
private String pwd = "global";*/
// The login button
private String loginImgName = "login.gif";
public void loginSuccess(String uname,String pwd){
driver = SetUpDriver.getWebDriver();
// Navigate to login URL.
driver.get(url);
// Input user name and password,then click login.
driver.findElement(By.name("login")).sendKeys(uname);
driver.findElement(By.name("password")).sendKeys(pwd);
driver.findElement(By.name(loginImgName)).click();
System.out.println(driver.getCurrentUrl());
// Set checkpoint to verify if login successfully
if (driver.getCurrentUrl().trim().contains(loginUrl)) {
System.out.println("##Successful## Login successfully.");
driver.get(mainUrl); // Direct to navigate the main page in order to
// skip the change password page
} else {
System.out.println("##Failed## Loging failed.");
System.out.println("##The logon failed url is"
+ driver.getCurrentUrl());
}
}
public void loginFailed(String uname,String pwd,String errorMsgExpected){
driver = SetUpDriver.getWebDriver();
driver.get(url);
// login with blank user name and blank password
driver.findElement(By.name("login")).sendKeys(uname);
driver.findElement(By.name("password")).sendKeys(pwd);
driver.findElement(By.name(loginImgName)).click();
// Verify 'Please fill in login and password.' by the junit's assertEquals method.
String errorMsgText = driver.findElement(By.xpath("//font[@class='ebt_error']")).getText();
assertEquals(errorMsgText, errorMsgExpected);
// Verify the 'Please fill in login and password.' by the if else statement.
List<WebElement> errorMsg;
errorMsg = driver.findElements(By.xpath("//font[@class='ebt_error']"));
if (errorMsg.size() > 0) {
for (WebElement msgText : errorMsg) {
if (msgText.getText().trim().equals(errorMsgExpected)) {
System.out
.println("##TestSuccessful## Login with "+uname+"/"+pwd+ " error msg :"
+ msgText.getText());
} else {
System.out
.println("##TestFailed##Login with "+uname +"/"+pwd+ " error msg :"
+ msgText.getText());
}
}
}
}
}
在录制 Selenium脚本完成后,回放时不一定能顺利执行完成,总会遇到这样或那样的问题,但一般80%的问题都是由于element找不到导致的,这时就需要我们耐心来调试。
以下图为例,脚本执行到verifyText这一步时报错了(报错的步骤会以红色背景色显示),点选【Log】标签,查看log显示 ‘[error] Element //td/table/tbody/tr[2]/td[2]/table/tbody/tr/td/table/tbody/tr[2]/td[2]/font/b not found’, 提示的原因是由于在页面没有找到这个特定元素。一般来说,如果verifyText失败有两种可能,一种是 Locator可能写错了,一种是之前的步骤有错误导致根本没有到达这个页面,所以找不到。
先来验证第一种。我们手动操作login 系统,然后选中这条verifyText命令,点选【find】按钮,若 提示[error] locator not found: //td/table/tbody/tr[2]/td[2]/table/tbody/tr/td/table/tbody/tr[2]/td[2]/font/b, 那么说明我们locator写的不正确,需要改正。否则,命令执行成功并且element以高亮显示,则说明locator没有问题。
排除了第一种可能,开始验证第二种可能。这样的话就需要一步步仔细排查了,首先检查上一个页面是否正确。通过查看我们发现 定义变量时 变量名称为LoginName,而使用时 变量名称误写为Loginname(注意 要区分大小写),这样脚本执行时 LoginID输入的就是空值,导致登录失败,所以element肯定找不到了。
语言转换
Selenium是可以支持多种语言的,包括C#,Java,Python和Ruby等。一般我们录制的是以html形式存储的,但是为了显示直观一般以Table形式显示在UI,但selenium给我们提供了选项可以将其转为C#/Java/Python/Ruby 等。下图所示,是将我们的loginTestCase 转为Java/Junit4脚本,关于Java/Junit4 ,我们在后面的章节讲webdriver时会讲到的,在这边文章的最后 我会附一个 Java/Junit4 test script,大家可以先看一下。
录制生成的Table样式
录制生成的HTML
转换操作
附 Junit4 script:
Java
package common;
import static org.junit.Assert.assertEquals;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
public class Login {
private WebDriver driver;
// login url
private String url = "http://10.237.89.33:58531/ctwicmanage/login.jsp";
// login successfull page
private String loginUrl = "http://10.237.89.33:58531/ctwicmanage/siteLogon.eppic";
// The main page
private String mainUrl = "http://10.237.89.33:58531/ctwicmanage/main.eppic";
// login username and password
/*private String uname = "global";
private String pwd = "global";*/
// The login button
private String loginImgName = "login.gif";
public void loginSuccess(String uname,String pwd){
driver = SetUpDriver.getWebDriver();
// Navigate to login URL.
driver.get(url);
// Input user name and password,then click login.
driver.findElement(By.name("login")).sendKeys(uname);
driver.findElement(By.name("password")).sendKeys(pwd);
driver.findElement(By.name(loginImgName)).click();
System.out.println(driver.getCurrentUrl());
// Set checkpoint to verify if login successfully
if (driver.getCurrentUrl().trim().contains(loginUrl)) {
System.out.println("##Successful## Login successfully.");
driver.get(mainUrl); // Direct to navigate the main page in order to
// skip the change password page
} else {
System.out.println("##Failed## Loging failed.");
System.out.println("##The logon failed url is"
+ driver.getCurrentUrl());
}
}
public void loginFailed(String uname,String pwd,String errorMsgExpected){
driver = SetUpDriver.getWebDriver();
driver.get(url);
// login with blank user name and blank password
driver.findElement(By.name("login")).sendKeys(uname);
driver.findElement(By.name("password")).sendKeys(pwd);
driver.findElement(By.name(loginImgName)).click();
// Verify 'Please fill in login and password.' by the junit's assertEquals method.
String errorMsgText = driver.findElement(By.xpath("//font[@class='ebt_error']")).getText();
assertEquals(errorMsgText, errorMsgExpected);
// Verify the 'Please fill in login and password.' by the if else statement.
List<WebElement> errorMsg;
errorMsg = driver.findElements(By.xpath("//font[@class='ebt_error']"));
if (errorMsg.size() > 0) {
for (WebElement msgText : errorMsg) {
if (msgText.getText().trim().equals(errorMsgExpected)) {
System.out
.println("##TestSuccessful## Login with "+uname+"/"+pwd+ " error msg :"
+ msgText.getText());
} else {
System.out
.println("##TestFailed##Login with "+uname +"/"+pwd+ " error msg :"
+ msgText.getText());
}
}
}
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | package common; import static org.junit.Assert.assertEquals; import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; public class Login { private WebDriver driver; // login url private String url = "http://10.237.89.33:58531/ctwicmanage/login.jsp"; // login successfull page private String loginUrl = "http://10.237.89.33:58531/ctwicmanage/siteLogon.eppic"; // The main page private String mainUrl = "http://10.237.89.33:58531/ctwicmanage/main.eppic"; // login username and password /*private String uname = "global"; private String pwd = "global";*/ // The login button private String loginImgName = "login.gif"; public void loginSuccess(String uname,String pwd){ driver = SetUpDriver.getWebDriver(); // Navigate to login URL. driver.get(url); // Input user name and password,then click login. driver.findElement(By.name("login")).sendKeys(uname); driver.findElement(By.name("password")).sendKeys(pwd); driver.findElement(By.name(loginImgName)).click(); System.out.println(driver.getCurrentUrl()); // Set checkpoint to verify if login successfully if (driver.getCurrentUrl().trim().contains(loginUrl)) { System.out.println("##Successful## Login successfully."); driver.get(mainUrl); // Direct to navigate the main page in order to // skip the change password page } else { System.out.println("##Failed## Loging failed."); System.out.println("##The logon failed url is" + driver.getCurrentUrl()); } } public void loginFailed(String uname,String pwd,String errorMsgExpected){ driver = SetUpDriver.getWebDriver(); driver.get(url); // login with blank user name and blank password driver.findElement(By.name("login")).sendKeys(uname); driver.findElement(By.name("password")).sendKeys(pwd); driver.findElement(By.name(loginImgName)).click(); // Verify 'Please fill in login and password.' by the junit's assertEquals method. String errorMsgText = driver.findElement(By.xpath("//font[@class='ebt_error']")).getText(); assertEquals(errorMsgText, errorMsgExpected); // Verify the 'Please fill in login and password.' by the if else statement. List<WebElement> errorMsg; errorMsg = driver.findElements(By.xpath("//font[@class='ebt_error']")); if (errorMsg.size() > 0) { for (WebElement msgText : errorMsg) { if (msgText.getText().trim().equals(errorMsgExpected)) { System.out .println("##TestSuccessful## Login with "+uname+"/"+pwd+ " error msg :" + msgText.getText()); } else { System.out .println("##TestFailed##Login with "+uname +"/"+pwd+ " error msg :" + msgText.getText()); } } } } } |
相关文章推荐
- 【原创】Selenium学习系列之(一)(二)—Selenium简介,环境搭建及使用
- 【原创】Selenium学习系列之(三)—Selenium基本命令
- 【原创】Selenium学习系列之(五)—从Selenium 到 Selenium2(Webdriver)
- 【原创】Selenium学习系列之(六)—Junit4中的注释和TestSuite
- 【原创】Selenium学习系列之(七)—ConnectDB和复用测试方法
- 【原创】Selenium学习系列之(八)—Maven配置生成测试报告
- [软件调试学习笔记]WinDbg演示IA-32 CPU下的Windows 分页机制下的地址转换过程
- 【原创】《Linux设备驱动程序》学习之循序渐进 --- 调试技术
- Android学习系列--App调试内存泄露之Context篇(下)
- 【原创】某驱动的内核调试检测学习内核调试引擎加载机制
- IT职场人生系列之二十二:如何学习新语言(二)
- Golang 入门系列(二)学习Go语言需要注意的坑
- 从零开始系列--R语言基础学习笔记之一 环境搭建
- [原创]java WEB学习笔记68:Struts2 学习之路-- 类型转换与复杂属性配合使用
- 从零开始系列-R语言基础学习笔记之二 数据结构(一)
- [C++再学习系列] 隐式类型转换与转换操作符
- 原创翻译:Go, Ruby, Swift and Java: 是时候学习一门新的DevOps语言了吗?
- 从零开始系列-R语言基础学习笔记之二 数据结构(二)
- 左脑原创geoserver学习系列文章 (第一部分代码的检出)。
- Selenium 2 系列学习一: JAVA环境搭建(IDEA)