如何查找td元素是否存在-使用java的selenium webdriver
Html代码如何查找td元素是否存在-使用java的selenium webdriver,java,selenium,Java,Selenium,Html代码 <table class="adminlist" width="100%" cellspacing="0" cellpadding="0" border="0"> <tbody> <tr data-bind="if: RowCounts>0, attr: {StatusId: Id, DescName:Name}" statusid="2" descname="Abandoned"></tr> <tr data-bind=
<table class="adminlist" width="100%" cellspacing="0" cellpadding="0" border="0">
<tbody>
<tr data-bind="if: RowCounts>0, attr: {StatusId: Id, DescName:Name}" statusid="2" descname="Abandoned"></tr>
<tr data-bind="if: RowCounts>0, attr: {StatusId: Id, DescName:Name}" statusid="1" descname="Active">
<td style="width: 5%;">
<input type="checkbox" data-bind="attr: { accesskey: Id }" accesskey="1">
</td>
<td class="country">
<span data-bind="text:Name">Active</span>
(
<span data-bind="text:RowCounts">20</span>
)
</td>
</tr>
活跃的
(
20
)
我们如何在上表中找到“td”元素,基于上面的第一行没有td元素,但第二行有td元素
java代码
Hashtable<String, Integer> renewalStatus = new Hashtable<String, Integer>();
List<WebElement> activeAssetStatus = driver.findElements(By
.xpath("//*[@id='divPatPortfolioStatusCount']/table/tbody/tr"));
for (int i = 1; i <= activeAssetStatus.size(); i++) {
List<WebElement> statusValue = activeAssetStatus.get(i)
.findElements(By.tagName("td"));
if (statusValue.size() > 0) {
WebElement al = driver
.findElement(By
.xpath("//*[@id='divPatPortfolioStatusCount']/table/tbody/tr["
+ i + "]/td[2]"));
String mainText = al.getText();
final Pattern p = Pattern.compile("(.*?)\\s*\\((.*?)\\)");
final Matcher m = p.matcher(mainText);
m.find();
String name = m.group(1);
String count = m.group(2);
renewalStatus.put(name, Integer.parseInt(count));
}
}
}
Hashtable renewalStatus=new Hashtable();
List activeAssetStatus=driver.findElements(按
.xpath(“/*[@id='divPatPortfolioStatusCount']/table/tbody/tr”);
对于(int i=1;i 0){
WebElement al=驱动程序
.findElement(由
.xpath(“//*[@id='divPatPortfolioStatusCount']/table/tbody/tr[”
+i+“]/td[2]”);
字符串mainText=al.getText();
final Pattern p=Pattern.compile((.*?\\s*\\(.*?\\);
最终匹配器m=p.Matcher(主文本);
m、 查找();
字符串名称=m.group(1);
字符串计数=m.group(2);
renewalStatus.put(name,Integer.parseInt(count));
}
}
}
对于上述代码,无法在哈希表中收集和存储td值
它产生了“非接触元素例外”
因为在if条件i值1中,它会产生此异常,所以如何收集具有td值的对应行List alltreelements=driver.findElements(By.xpath(“//table[@class='adminlist']/tbody/tr”);
List <WebElement> allTrElements = driver.findElements(By.xpath("//table[@class='adminlist']/tbody/tr"));
for(int i= 0;i<allTrElements.size();i++){
List<WebElement> allTdElements = allTrElements.get(i).findElements(By.tagName("td"));
if(allTdElements.size() > 0 ){
// if confirms <tr> contains <td>
}
}
对于(int i=0;i 0){
//如果确认包含
}
}
WebDriver mainDriver=new ChromeDriver();
//获取表元素
WebElement eleTable=mainDriver.findElement(按.tagName(“表”);
//获取表的行元素列表
ListtableRowList=eleTable.findElements(按.tagName(“tr”));
对于(int i=0;i0){
//如果大小>0,则其中有td元素。
}
}
@shekhar请在i值变为1的循环中找到我的java代码,你能告诉我你想从td元素中获取什么吗?:在该td中的span值(活动,20),刮取该表中的所有行查找并收集所有td值,然后检查是否(statusValue.size()>0),而不是使用xpath确定第二个td元素。请尝试迭代获得的td列表,即statusValue。因此,在该statusValue中,get(1)将为您提供第二个td元素。感谢您的帮助,请查找for循环,因为它工作正常,但完成for(int i=1;i 0)的循环需要更多时间{WebElement al=driver.findElement(By.xpath(“/*[@id='divPatPortfolioStatusCount']]/table/tbody/tr[“+i+”]/td[2]”);}
WebDriver mainDriver = new ChromeDriver();
//get the table element
WebElement eleTable = mainDriver.findElement(By.tagName("table");
//get the list of row elements of table
List<WebElement>tableRowList = eleTable.findElements(By.tagName("tr"));
for(int i = 0 ; i < tableRowList.size(); i++) {
//take individual rows
WebElement rowElement = tableRowList.get(i);
//get the list of td elements
List<WebElement> dataElement = rowElement.findElements(By.tagName("td"));
if(dataElement.size() > 0) {
//if size > 0, there are td elements in it.
}
}