使用Selenium计算WebTable中的隐藏行数



我在应用程序中有一个隐藏按钮,用于隐藏web表上的重复数据项。我一直在尝试捕捉隐藏行的数量。请参阅下面的html和我的方法。我尝试过的每一次尝试都以0结束。但是,结果应该是2

HTML代码:

<tbody>
<tr role = "row" class="odd">...<tr/>
<tr role = "row" class="even">...<tr/>
<tr role = "row" class="odd">...<tr/>
<tr role = "row" class="even">...<tr/>
<tr role = "row" class="odd">...<tr/>
<tr role = "row" class="odd duplicate" style="display: none;" >...<tr/>
<tr role = "row" class="even duplicate" style="display: none;" >...<tr/>
</tbody>

def getInvisibleTableRowCount()
{
WebDriver driver = DriverFactory.getWebDriver()
WebElement table = driver.findElement(By.xpath("//*[@id='DataTables_Table_0']/tbody"))
List<WebElement> rows_table= table.findElements(By.cssSelector("[display=none]"));
int rowSize = rows_table.size();
return rowSize;
}

这是我的另一个尝试:

def getInvisibleTableRowCount()
{
WebDriver driver = DriverFactory.getWebDriver()
WebElement table = driver.findElement(By.xpath("//*[@id='DataTables_Table_0']/tbody"))
List<WebElement> rows_table= table.findElements(By.tagName("tr[not(contains(@style,'display: none;'))]"));
int rowSize = rows_table.size();
return rowSize;
}

如果我以//*[@id='DataTables_Table_0']/tbody/tr[not(contains(@style,'display:none;'(]的形式运行xpath,我可以在浏览器上找到隐藏的行。

我也尝试过:

def getInvisibleTableRowCount()
{
WebDriver driver = DriverFactory.getWebDriver()
WebElement table = driver.findElement(By.xpath("//*[@id='DataTables_Table_0']/tbody"))
List<WebElement> rows_table= table.findElements(By.tagName("tr"));
int rowSize = rows_table.size();
for(WebElement row: rows_table)
{
if(row.isDisplayed()==false)
{
rowSize = rowSize -1; 
}
}
return rowSize;
}

在@Hac的评论之后,我尝试了JQuery。我在浏览器上运行了jQuery,它运行起来没有问题。但我得到了一个";NULL";在我的函数中返回的值。我仔细检查了注释行中提示正确的jQuery字符串。

@Keyword
def getTableRowCountAfterHiding()
{
def jQuery='$'+'("#DataTables_Table_0 tbody tr:visible").length'
WebUI.comment(jQuery);
def visibleRowCounts = new utils.ExecuteJavaScript().executeJavaScript(jQuery);
return visibleRowCounts;
}

我定义了运行JS的utils,如下所示:

public class ExecuteJavaScript {
//This keyword is designed to execute JS.
@Keyword
def executeJavaScript(String javascript) {
((JavascriptExecutor) DriverFactory.getWebDriver()).executeScript(javascript)
}
}

这起到了作用:

def getTableRowCountAfterHiding()
{   
WebDriver driver = DriverFactory.getWebDriver()
List<WebElement> table = driver.findElements(By.xpath("//*[@id='DataTables_Table_0']/tbody/tr[not(contains(@style,'display: none;'))]"))
int rowSize = table.size();
return rowSize;
}

最新更新