selenium - 如何在 Selenium 中找到元素内的元素

标签 selenium selenium-webdriver

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

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

我正在尝试从数组列表中的行(参见表数据)中获取数据并进一步使用该数组列表。目前发生的情况是在开始时获取列标题的数据,但我没有用。我只想要行的数据。我无法确定仅收集表行数据的正确方法。 如果表格的 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"));

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

最佳答案

表格中的每一行都位于其自己的“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缩小了浏览器。这就是我实现获取数据目标的方式。我相信,如果我分享更多细节,其他人可能会为我提供答案。不过,还是很抱歉,希望我的回答对大家有所帮助。

关于selenium - 如何在 Selenium 中找到元素内的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21578839/

相关文章:

java - 如何确定 WebElement 是否存在于 Selenium 中?

Selenium GRID——调用 WebDriver.getCurrentUrl() 时, session 由于 TIMEOUT 在不到 100 毫秒后终止

java - Selenium 上传文件时样式为 ="display:none;"

python - 使用Python的 Selenium : Permission Denied to Launch Webdriver

java - 如何使用appium+Java在Android应用程序中滚动?

java - Selenium 中自动弹出身份验证

python - selenium-webdriver:如何使用 for 循环查找元素

python - 为什么在 Python Selenium click() 中不起作用,但 send_keys ('\n' )却起作用?

python - 单击 "show more"按钮直到显示表中的所有数据并从表中获取所有数据

java - Selenium click方法统一