您的位置:首页 > 其它

【原创】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());
}
}
}
}
}

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());

}
}

}
}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐