【问题标题】:Count Of Hidden Rows in WebTable By Using Selenium使用 Selenium 计算 WebTable 中的隐藏行数
【发布时间】:2020-12-01 15:48:19
【问题描述】:

我在应用程序中有一个隐藏按钮,用于隐藏 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)
    }
}

【问题讨论】:

  • Selenium 旨在不与隐藏元素交互,以模仿与网站交互的人。我建议检查前后可见的总数。或者您可以使用 javascript 来强制与隐藏元素进行交互。 stackoverflow.com/q/22110282/6205848
  • 感谢您指出这一点。我一直在为此苦苦挣扎。我会尝试执行JS。
  • 我尝试执行JS,到目前为止没有运气。

标签: selenium-webdriver groovy katalon-studio


【解决方案1】:

成功了:

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;
}

【讨论】:

    猜你喜欢
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 2022-07-17
    • 2014-03-22
    相关资源
    最近更新 更多