从表中选择行 - Java Selenium

时间:2016-06-27 17:41:39

标签: java selenium html-table row

我有一个快速的Java表问题。我有一个表,包含4列和X行。列如下:引号,名称,日期和添加按钮。 我在尝试查找表格中的特定名称后,点击找到该名称的行上的添加按钮。

示例:

Quote#  Name       Date        Add-Button

100001  John Doe1  01/01/1980  [Add]
100002  John Doe2  01/01/1981  [Add]
100003  John Doe3  01/01/1982  [Add]
100004  John Doe4  01/01/1983  [Add]

我已编写以下代码,以确定表中是否有某个名称:

public List<String> getInternetQuoteNames()
    {
        List<WebElement> webName = sh.getElements(newInternetQuotesNames);
        List<String> stringName = new ArrayList<>();
        for(WebElement name : webName)
            stringName.add(name.getText());
        return stringName;
    }

我现在正在尝试编写另一种方法来点击正确的[添加]按钮,但我不确定如何访问正确的行,因为我对表不满意。我到目前为止写的是:

public void addInternetQuoteByName(String name)
    {
        List<String> listOfNames = getInternetQuoteNames();
        if(listOfNames.contains(name))
        {
            // Find row of provided name
           // Click on [Add]-button on that row
        }
    }

表格的HTML代码如下:

<tbody>
    <tr>
        <td>100040365822</td>
        <td>Test06232016 Test033929</td>
        <td>06/23/2016</td>
        <td>
            <a id="assignQuoteLink_100040365822" class="add_from_pqs" href="#">Add Quote</a>
        </td>
    </tr>
    <tr class="alt">
        <td>100040365772</td>
        <td>Test06232016 Test033723</td>
        <td>06/23/2016</td>
        <td>
            <a id="assignQuoteLink_100040365772" class="add_from_pqs" href="#">Add Quote</a>
        </td>
    </tr>
    <tr>
        <tr class="alt">
            <tr>
                <tr class="alt">
</tbody>

有关如何完成该方法并点击右侧行[添加]按钮的任何提示,我们非常感谢!

3 个答案:

答案 0 :(得分:4)

尝试这种方法:

  1. 获取表driver.findElements(By.xpath("table xpath")).size()
  2. 的大小
  3. 遍历表中的每个名称记录,并查找是否在输入中找到匹配项。
  4. 点击添加按钮。
  5. <强>代码

    public static void addInternetQuoteByName(String Name) 
    {
        WebDriver driver = new FirefoxDriver();
        int rowCount = driver.findElements(By.xpath("xpath of table")).size();
    
        for (int i = 1; i <= rowCount; i++) 
        {
            String sCellValue = driver.findElement(By.xpath("XPATH Of Name row")).getText();
    
            if (sCellValue.equalsIgnoreCase(Name)) 
            {
                 driver.findElement(By.xpath("xpath of add")).click();
            }
        }
    
        driver.close();
    }
    

    名称和添加按钮的xpath必须传递为使tr [i]动态化 例如:.//*[@id='content']/table/tbody/tr["+i+"]/td[2]

    由于我不确定名称和添加按钮列的确切xpath,我提供了一个示例。

    如果您有问题,请告诉我。

答案 1 :(得分:1)

这是一个完成你要求的功能。它抓取所有TR,在第二个单元格(TD)中查找名称,如果找到,则单击&#34;添加引用&#34;该行的链接。

conda create -n env_full python=3

答案 2 :(得分:0)

这个要求听起来很像这篇文章。 http://www.testautomationguru.com/selenium-webdriver-finding-webelements-using-map/

基本上,您需要插入一些javascript来创建结构,如下所示。

{
    "John Doe1": {
        "Add" : []
    },
    "John Doe2": {
        "Add" : []
    }   

}

然后返回返回的结果并输入caste到Map。

Map < String, WebElement >> nameMap = ((JavascriptExecutor) driver).executeScript(queryString);

然后你的用法就像

nameMap.get("John Doe3").get("Add").click();