如何在selenium中找到元素中的元素

时间:2014-02-05 13:33:44

标签: selenium selenium-webdriver

我正在使用selenium创建数据验证框架。我正在努力解决的问题是我想在元素“tr”(html标签)中找到元素“td”(html标签)。这是我写的代码。

Iterator<WebElement> i = rows.iterator();
While(i.hasnext()){
List<WebElement> columns = row.findElements(By.tagName("td"));
for(WebElement s:columns)
{
    System.out.println("columnDetails : "+s.getText().toString());
}
if(columns.isEmpty())
{
    ElementNotFoundException e = new ElementNotFoundException("No data in table");
    throw e;
}
Iterator<WebElement> j = columns.iterator();// does some other work
ClusterData c = new ClusterData(); // does some other work
ClusterDataInitializer.initUI(c, j, lheaders); // does some other work
CUIData.put(c.getCN(), c); // does some other work
}

现在问题是:

The Data from table which i am trying to fetch in arraylist

我正在尝试从arraylist中的行(参见表数据)中获取数据并进一步使用该arraylist。目前发生的是列标题的数据是在开始时获取的,我没有用。我只想要行的数据。我无法确定仅收集表行数据的正确方法。 如果表的xPath将帮助您正确理解它,那么这里是详细信息:

群集名称列的表标题xPath

/html/body/table/tbody/tr[2]/td[2]/div[2]/div/div/div[2]/div/div/div[2]/div/div/div[2]/div/div/div/div/div/div[2]/div/div/div[2]/div/div/div[2]/div[2]/div/table/tbody/tr/td[2]/div/div[2]

测试群集01的表行(表数据)xPath

/html/body/table/tbody/tr[2]/td[2]/div[2]/div/div/div[2]/div/div/div[2]/div/div/div[2]/div/div/div/div/div/div[2]/div/div/div[2]/div/div/div[3]/div[2]/div/table/tbody/tr/td[2]/div/div/a

如果您还有其他需要,请告诉我。

我使用以下代码从表中提取行数据。

List<WebElement> rows = getElement(driver,sBy,"table_div_id").findElements(By.tagName("tr"));

表格所在的sBy = By.idtable_div_id = id div。这会将所有行提取到arraylist,然后我使用代码将行数据提取到另一个arraylist。这是我被困住的地方。

4 个答案:

答案 0 :(得分:8)

表格中的每一行都在自己的“table”标签中,因此以下内容无效: -

 List<WebElement> rows = driver.findElements(By.xpath("//div[@id = 'table_div_id']//tr"));
 List<WebElement> columns = row.findElements(By.xpath("./td"));

或我用于先前产品发布的方法,即

List<WebElement> columns = row.findElements(By.tagName("td"));

所以,我使用了以下方法,使我能够从表中捕获所有可见行。

List<WebElement> columns = row.findElements(By.xpath(".//table[@class='gridxRowTable']/tbody/tr"));

但之后我遇到了另一个问题,因为这个表是使用dojo实现的,滚动是不可能的,Selenium只能捕获可见的行,所以为了克服这个问题,我在浏览器中使用selenium缩小了。这就是我实现获取数据的目标。我相信如果我能分享更多细节,其他人可能会给我答案。不过,对不起,希望我的回答能帮到你们所有人。

答案 1 :(得分:4)

而不是

 List<WebElement> columns = row.findElements(By.tagName("td"));

尝试使用

 List<WebElement> columns = row.findElements(By.xpath("./td"));

检查这是否有帮助。这应该给你td元素。如果我不了解您的问题,请告诉我。

答案 2 :(得分:-1)

您是否安装了selenium IDE?对要检索的行执行storeText操作,然后在IDE中填充xpath。会有多个xpath;最可靠的是xpath:position,用它来捕获你的行。

使用firebug可以更好地了解你的AUT。

Firebug和Selenium IDE是Selenium Framework开发的最基本组件。

您可以根据需要操作xpath。

答案 3 :(得分:-1)

你可以这样使用 -

driver.findElement(By.Xpath("//table[@id=\"table1\"]/tbody/tr[2]/td[1]"));  

此致

Anuja