I would like to count the lines of a grid. I have uniquely identified 3 rows with an xpath but the count gives me 4 because an invisible one is generated even if it has different attributes. Is there any way to eliminate the from the count?
WebDriver driver = DriverFactory.getWebDriver()
WebElement TableVoci = driver.findElement(By.xpath(…))
List Rows = TableVoci.findElements(By.xpath(…))
rows_int = Rows.size()
println(rows_int)
Is this what you want?
rows_int = Rows.size() - 1
println(rows_int)
1 Like
Please show the XPath expression here.
Please show how the HTML source with the “attributes” looks like.
liliana.moro:
an invisible one
Can you tell us how the invisible <tr>
element is made invisible?
You should read the HTML source.
Possibly with some CSS styling.
You should take that into account in the locator (CSS Selector or XPath expression) and exclude the invisible <tr>
element.
This class:
class=“dx-row dx-freespace-row dx-state-invisible”
is also considered with the following xpath
WebDriver driver = DriverFactory.getWebDriver()
WebElement TableVoci = driver.findElement(By.xpath(‘(//wki-grid//tbody)[2]//tr[@class=“dx-row dx-data-row”]’))
List Rows = TableVoci.findElements(By.xpath(‘(//wki-grid//tbody)[2]//tr[@class=“dx-row dx-data-row”]’))
I solved with:
rows_int = Rows.size() - 1
This statement assumes that you will always have 1 invisible row. Is it really the case?
Isn’t it the case that you have 2 or more (variable number of) invisible rows, or you have zero invisible row?
Just a small advice.
... //tr[contains(@class,"dx-row") and contains(@class, "dx-data-row")]
would be better.
Why? — The following 2 lines of HTML has the same meaning in terms of HTML+CSS semantics.
(1)
.... <tr class="dx-row dx-data-row">
(2)
.... <tr class="dx-data-row dx-row">
However the xpath //tr[@class="dx-row dx-data-row"]
will match the case (1) only. It does not match the case(2).
The xpath //tr[contains(@class,"dx-row") and contains(@class, "dx-data-row")]
will match both of (1) and (2)
An XPath
//tr[contains(@class, "data-row") and not(contains(@class, "dx-state-invisible"))]
would select the <tr>
elements with data-row
class and WITHOUT dx-state-invisible
class. I guess, this is what you wanted.
1 Like
Yes, only one invisible row.
When you have a minute please be sure to mark the response that helped solve your question so we can close this thread.
Thank you for your participation.