Utils

wasd.util.locator

contains

Locates an element containing a text inside. Either CSS or XPath locator can be passed, however they will be converted to XPath.

from wasd.util import Locator

Locator.contains("div.foo", "Hello, World!")
>>> "descendant-or-self::div[@class and contains(concat(' ', normalize-space(@class), ' '), ' foo ')][contains(., 'Hello, World!')]"

Locator.contains("//*[@data-id = 'foo']/ancestor::*", "Hello, World!")
>>> "//*[@data-id = 'foo']/ancestor::*[contains(., 'Hello, World!')]"

Locator.contains("div#foo", "goodbye", "and", "farewell")
>>> "descendant-or-self::div[@id = 'foo'][contains(., 'goodbye')][contains(., 'and')][contains(., 'farewell')]"

equal

Locator.equal("div#foo", "Hello, World!")
>>> "descendant-or-self::div[@id = 'foo'][.= 'Hello, World!']"

element_at

Locates element at position. If a negative value is provided, counting starts from the last element. First element has index 1.

Locator.element_at("ul > li", 5)
>>> '(descendant-or-self::ul/li)[position()=5]'

Locator.element_at("ul > li", -2)
>>> '(descendant-or-self::ul/li)[position()=last()-1]'

to_xpath

Converts CSS to XPath.

Locator.to_xpath("p + a")
>>> "descendant-or-self::p/following-sibling::*[name() = 'a' and (position() = 1)]"

is_xpath

Checks that locator is an XPath.

Locator.is_xpath("//div[@id]")
>>> True

Locator.is_xpath("[id = 'foo']")
>>> False

is_css

Checks that provided string is CSS selector.

Locator.is_css("[id = 'foo']")
>>> True

Locator.is_css("//div[@id]")
>>> False

Last updated