java - Selenium Xpath to find a table cells inside a div tag -
i have following html code need check if text exists within table cell:
<div class="background-ljus" id="autotext"> <table class="topalignedcellcontent"> <tbody> <tr> <td>x1</td> </tr> <tr> <td>x2</td> </tr> </tbody> </table> <table> <tbody> <tr> <td>y1</td> <td>y2</td> </tr> </tbody> </table> <table> <tbody> <tr> <td>z1</td> <td>z2</td> </tr> </tbody> </table> </div> i have solved this:
by locator = getlocator(commonconst.xpath, "*//div[@" + type + "='" + anyname + "']"); fluentwait(locator); webelement div = getdriver().findelement(locator); list<webelement> cells = div.findelements(by.tagname("td")); (webelement cell : cells) { if (cell.gettext().contains(celltext)) { foundit = true; } } but think bit slow because need several times. tried xpath had no luck.
"*//div[@id='autotext']//td[contains[text(), 'celltext']]" "*//div[@id='autotext']//table//tbody//tr[td//text()[contains[., 'celltext']]" anyone have suggestion why xpath isn't working?
wrong:
*//div[@id='autotext']//td[contains[text(), 'celltext']] *//div[@id='autotext']//table//tbody//tr[td//text()[contains[., 'celltext']] correct (with shorter alternatives):
//div[@id='autotext']//td[contains(text(), 'celltext')] //div[@id='autotext']//td[contains(., 'celltext')] //div[@id='autotext']/table/tbody/tr[td//text()[contains(., 'celltext')] //div[@id='autotext']/table/tbody/tr[td[contains(., 'celltext')]] contains()functiontext()needs lowercase- predicates can nested
- don't use
//when don't have to
note
. refers "this node" and, when given argument string function such contains(), equivalent of string(.). this, however, not @ same text().
string(.) creates concatenation of text nodes inside current node, no matter how nested. text() node test , default selects direct children.
in other words, if current node <td>foo <b>bar</b> baz</td>, contains(text(), 'bar') false. (so contains(text(), 'baz'), different reason.)
contains(., 'bar') on other hand return true, contains(., 'baz').
only when current node contains nothing single text node, text() , . equivalent. of time, want work . instead of text(). set predicates accordingly.
Comments
Post a Comment