I executed the jQuery in the browser and it returns 5. However, in my function it returns null.
Here is the 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>
Here is my JS:
@Keyword
def getTableRowCountAfterHiding()
{
def jQuery=‘$’+‘(“#DataTables_Table_0 tbody tr:visible”).length’
WebUI.comment(jQuery);
def visibleRowCounts = WebUI.executeJavaScript(jQuery, null);
return visibleRowCounts;
}
On the face of it, your jQuery/JS code appears to work (obviously, I couldn’t use your IDs)
That code is running against THIS forum page.
This is how I might write your code:
String js = '\$("#DataTables_Table_0 tbody tr:visible").length;'
int len = (int) WebUI.executeJavaScript(js, null)
return len
The other thing you might try is writing the comparison test inside the JavaScript and return a boolean if the comparison succeeds. That is how I test row counts.
Thank you very much. I will give it a try. I also come with a different solution. I will share in case if anyone runs into this later. This will return the visible ones after hiding some table rows.
WebDriver driver = DriverFactory.getWebDriver()
List table = driver.findElements(By.xpath(“//*[@id=‘DataTables_Table_0’]/tbody/tr[not(contains(@style,‘display: none;’))]”))
int rowSize = table.size();
return rowSize;