我收到了一张桌子,能够获取并验证数据(电子邮件是否真的是电子邮件等等)。我们想要使用后端验证前端显示的数据。有一张桌子(我看过桌子 - 第一栏是名字,然后是电子邮件,电话号码,公司,国家和日期)。
现在,前端人员切换了列。我之前见过这张桌子,因此我知道接收信息的顺序。每次在前端进行小的更改时,我都必须更改代码。仅供参考,表格标题用" data-name"定义。所以如果您的解决方案涉及表头文件,我将能够使用它。我的代码发布在下面:
public static void getTableContents(){
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
//TODO Replace this w. until it find command
e.printStackTrace();
}
log("TABLE CONTENTS VERIFICATION");
//Get the table contents
WebElement table_element = driver.findElement(By.className(TABLE_RESPONSE));
//Click on a button to switch into the desired column
WebElement switchColumn = driver.findElement(By.cssSelector(".switchColumn img.pull-right"));
switchColumn.click();
// We do not want the first two contents as they represent default or error case.
List<WebElement> tr_collection=table_element.findElements(By.xpath("//tbody//tr[position()>2]"));
int i=1;
for(WebElement trElement : tr_collection)
{
List<WebElement> td_collection=trElement.findElements(By.xpath("td"));
int j=1;
for(WebElement tdElement : td_collection)
{
String check = tdElement.getText();
if(j==1) {
if(isValidName(check))
passed("Name Test : " );
else{
log(check + " is not a valid name");
}
}
if(j==2) {
if(isValidEmail(check))
{ passed("Email address Test : ");
}
else
log(check + " is not a valid email");
}
if(j==3) {
if(isValidNumber(check))
passed("Valid Number test : ");
else
log(check + " is not a valid number");
}
if(j==6){
if(isValidIccid(check))
passed("Valid Iccid test : ");
else
log(check+ " is not a valid Iccid");
}
if(j==4){
//Blank (for a while)
}
if(j==5){
if(isValidCountry(check))
passed("Valid country test : ");
else
log(check+ " is not a valid country");
}
j++;
}
System.out.println();
i++;
}
}
有没有快速的方法将此代码更改为我的要求?我无法一直改变数字(1,2,3,4,5,6)。我只是在寻找更新代码的聪明方法,而不是完全改变我的代码。
非常感谢任何帮助/提示。编辑:另外,我将更改我的if / else语句以切换案例,以便更容易理解。但截至目前,我遇到了一个很大的问题,因为我可能需要更改整个代码,所以请不要介意。
答案 0 :(得分:0)
如果您的表的表标题包含以下类:
data-Name
data-Email
然后您可以在代码中使用它,如下所示:
// We do not want the first two contents as they represent default or error case.
List<WebElement> tr_collection=table_element.findElements(By.xpath("//tbody//tr[position()>2]"));
int i=1;
for(WebElement trElement : tr_collection)
{
List<WebElement> td_collection=trElement.findElements(By.xpath("td"));
int j=1;
for(WebElement tdElement : td_collection)
{
String check = tdElement.getText();
String header = driver.findElement(By.xpath("//tbody//tr/th[" + j + "]")).getAttribute("class");
if(header.equals("data-Name")) {
if(isValidName(check))
passed("Name Test : " );
else{
log(check + " is not a valid name");
}
}
if(header.equals("data-Email")) {
if(isValidEmail(check))
{ passed("Email address Test : ");
}
else
log(check + " is not a valid email");
}
//... and so on
}
}
您可能需要更改此行以反映识别表标题的正确方法:
String header = driver.findElement(By.xpath("//tbody//tr/th[" + j + "]")).getAttribute("class");
但重点是使用“j”计数器来跟踪您所在的列,并检查该列标题的类名。如果您以这种方式识别列,则列的顺序应该不再重要。