Selenium - 更改表列

时间:2014-09-04 19:30:31

标签: java selenium selenium-webdriver

我收到了一张桌子,能够获取并验证数据(电子邮件是否真的是电子邮件等等)。我们想要使用后端验证前端显示的数据。有一张桌子(我看过桌子 - 第一栏是名字,然后是电子邮件,电话号码,公司,国家和日期)。

现在,前端人员切换了列。我之前见过这张桌子,因此我知道接收信息的顺序。每次在前端进行小的更改时,我都必须更改代码。仅供参考,表格标题用" 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语句以切换案例,以便更容易理解。但截至目前,我遇到了一个很大的问题,因为我可能需要更改整个代码,所以请不要介意。

1 个答案:

答案 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”计数器来跟踪您所在的列,并检查该列标题的类名。如果您以这种方式识别列,则列的顺序应该不再重要。