官术网_书友最值得收藏!

Locating elements using text

When testing web applications, you will also encounter situations where developers don't assign any attributes to the elements and it becomes difficult to locate elements.

Using the CSS selectors or XPath, we can find elements based on their text contents. In this recipe, we will explore methods to find elements using text values.

How to do it...

To find elements using their text contents, CSS selectors and XPath provide methods to find text within the elements. If an element contains specific text, this will return the element in the test.

Using XPath's text function

XPath provides the text() function, which can be used to see if an element contains the specified text in the following way:

WebElement cell = driver.findElement(By.xpath("http://td[contains(text(),'Item 1')]"));

We can also use a single period/dot, ".", instead of the text() function in following way:

WebElement cell = driver.findElement(By.xpath("http://td[contains(.,'Item 1')]"));

Here, we are using the contains function along with the text() function. The text() function returns the complete text from the element and the contains() function checks for the specific value that we have mentioned.

XPath also offers the normalize-space(.) function to match the element using the element's and its sub-element's text.

Finding elements using exact text value in XPath

With XPath, elements can be searched by exact text value in the following way:

WebElement cell = driver.findElement(By.xpath("http://td[.='Item 1']"));

This will locate the <td> element matching the exact text.

Using the CSS selector contains() pseudo-class

The CSS selectors provide the contains() pseudo-class which can be used to see if an element contains the specified text. For example, a test wants to find the cell of a table using its contents in the following way:

WebElement cell = driver.findElement(By.cssSelector("td:contains('Item 1')"));

The contains()pseudo-class accepts the text to be searched as a parameter. It then checks all the <td> elements in DOM for the specified text.

Note

The contains() pseudo-class may not work with browsers that don't natively support CSS selectors. Also, it has been deprecated from the CSS3 specification.

As an alternative to the contains() pseudo-class, you can use the innerText attribute (does not work with Firefox) or textContent attribute (for Firefox) in the following ways:

WebElement cell = driver.findElement(By.cssSelector("td[innerText='Item 1']"));

Or:

WebElement cell = driver.findElement(By.cssSelector("td[textContent='Item 1']"));

You can also use jQuery selectors, which support the contains() pseudo-class.

How it works...

CSS selector and XPath provide methods with which to find elements based on their text contents. This approach comes in handy when elements don't have enough attributes or when no other strategies work when attempting to find these elements.

To find elements using their text, both CSS selector and XPath search through the DOM for elements that have the specified text value and return the matching element(s).

主站蜘蛛池模板: 巴马| 宁晋县| 佛山市| 建始县| 宁国市| 高密市| 师宗县| 得荣县| 建平县| 含山县| 鄱阳县| 丰顺县| 德保县| 海晏县| 呼和浩特市| 贞丰县| 西吉县| 沙洋县| 比如县| 平安县| 临汾市| 万全县| 旬阳县| 饶平县| 惠东县| 咸宁市| 神池县| 尖扎县| 吉安市| 阿鲁科尔沁旗| 东兰县| 梁山县| 灵寿县| 屏山县| 建瓯市| 合川市| 福鼎市| 和田县| 额尔古纳市| 大英县| 巴林右旗|