selenium-webdriver - 使用 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;
}
如果我将 xpath 运行为 //*[@id='DataTables_Table_0']/tbody/tr[not(contains(@style,'display: none;'))] ,我可以在浏览器上找到隐藏的行。
我也试过这个:
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;
}
我定义了 utils 来运行 JS,如下所示:
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;
}
推荐阅读
- c# - 如何在列表中保存多个输入以发送到控制器
- amazon-web-services - 无法连接 SSH 密钥,权限被拒绝(公钥)
- html - Flex / Grid - 2 列,但第一列内部也有 2 列
- javascript - ngTable 搜索过滤器只适用于当前页面,而我想要全局搜索
- angular - (角度)错误:无法匹配任何路线。URL 段:'tab3/settings'
- flutter - Flutter:如何设置带有滚动x轴的条形图列的固定宽度
- php - 无法显示学生摘要视图,但在员工视图中工作正常
- python - Smartsheet 将一行移动到另一张工作表 - Python
- php - CakePHP 3 使用主键 (setPrimaryKey) 进行 JOIN,即使我指定了外键
- python - heapq 只返回一个最小元素并重复 n 次