eaiautomatontools.finders.find_element

Present the finder utilities for Selenium automaton.

Background

Launch a test web server serving controlled web pages on localhost port 8081

Use the python resources server.

>>> from eaiautomatontools.resources.app import Server

>>> myserver = Server()

>>> myserver.start()
...

Instantiate a web driver using the eaiautomatontools.browserServer

>>> from eaiautomatontools.browserServer import BrowserServer

>>> myWebDriver = BrowserServer()

Use a default browser such as Chrome in 32 bit version

>>> myWebDriver.browser_name = "chrome"

Serve the web driver

>>> myWebDriver.serve()
<BLANKLINE>
0

Request the web server IP 127.0.0.1:8081

>>> myWebDriver.go_to("http://localhost:8081")
...
0

Find an element

>>> from eaiautomatontools.finders import find_element

Find by id

>>> myElement = find_element(driver=myWebDriver.webdriver, field={"type":"id","value":"first"})

>>> myElement.tag_name
'div'

>>> myElement.text
'A text here with a link to a second page'

>>> myElement.is_displayed()
True

>>> myElement.is_enabled()
True

>>> myElement.is_selected()
False

Find by name

>>> myElement = find_element(driver=myWebDriver.webdriver, field={"type":"name","value":"test-div"})

>>> type(myElement)
<class 'selenium.webdriver.remote.webelement.WebElement'>

>>> myElement.text
'The tables test page'

Find by tag_name

>>> myElement = find_element(driver=myWebDriver.webdriver, field={"type":"tag_name","value":"a"})

>>> type(myElement)
<class 'selenium.webdriver.remote.webelement.WebElement'>

It will return the first tag found.

>>> myElement.text
'second page'
>>> myElement = find_element(driver=myWebDriver.webdriver, field={"type":"link_text","value":"second page"})

>>> type(myElement)
<class 'selenium.webdriver.remote.webelement.WebElement'>

>>> myElement.text
'second page'
>>> myElement = find_element(driver=myWebDriver.webdriver, field={"type":"partial_link_text","value":"second"})

>>> type(myElement)
<class 'selenium.webdriver.remote.webelement.WebElement'>

>>> myElement.text
'second page'

Find by css

>>> myElement = find_element(driver=myWebDriver.webdriver, field={"type":"css","value":"div"})

>>> type(myElement)
<class 'selenium.webdriver.remote.webelement.WebElement'>

It will return the first element found;

>>> myElement.text
'A text here with a link to a second page'

Another example

>>> myElement = find_element(driver=myWebDriver.webdriver, field={"type":"css","value":"a#tables"})

>>> myElement.text
'tables test page'

Find by xpath

>>> myElement = find_element(driver=myWebDriver.webdriver, field={"type":"xpath","value":"html/body/div[2]"})

>>> type(myElement)
<class 'selenium.webdriver.remote.webelement.WebElement'>

>>> myElement.text
'The tables test page'

Find an element giving a text value

>>> myWebDriver.go_to("http://localhost:8081/forms.html")
...
0

>>> myElement = find_element(driver=myWebDriver.webdriver, field={"type":"tag_name","value":"input", "text": "Your.mail@he.re"})

>>> myElement.get_attribute("value")
'Your.mail@he.re'

Not found element

>>> myWebDriver.go_to("http://localhost:8081")
...
0

>>> myElement = find_element(driver=myWebDriver.webdriver, field={"type":"id","value":"toto"})

>>> type(myElement)
<class 'NoneType'>

>>> myElement = find_element(driver=myWebDriver.webdriver, field={"type":"name","value":"toto-div"})

>>> type(myElement)
<class 'NoneType'>

>>> myElement = find_element(driver=myWebDriver.webdriver, field={"type":"tag_name","value":"table"})

>>> type(myElement)
<class 'NoneType'>

>>> myElement = find_element(driver=myWebDriver.webdriver, field={"type":"link_text","value":"toto page"})

>>> type(myElement)
<class 'NoneType'>

>>> myElement = find_element(driver=myWebDriver.webdriver, field={"type":"partial_link_text","value":"toto"})

>>> type(myElement)
<class 'NoneType'>

>>> myElement = find_element(driver=myWebDriver.webdriver, field={"type":"css","value":"input"})

>>> type(myElement)
<class 'NoneType'>

>>> myElement = find_element(driver=myWebDriver.webdriver, field={"type":"xpath","value":"html/body/span"})

>>> type(myElement)
<class 'NoneType'>

The web driver is mandatory

>>> myElement = find_element(field={"type":"xpath","value":"html/body/div[2]"})
Traceback (most recent call last):
...
TypeError: Driver is expected

The field value is mandatory

>>> myElement = find_element(driver=myWebDriver.webdriver)
Traceback (most recent call last):
...
TypeError: None is not a dictionary

The field value must contains a type and a value key

>>> myElement = find_element(driver=myWebDriver.webdriver, field={"type":"xpath"})
Traceback (most recent call last):
...
KeyError: "The field argument doesn't contains either the 'type' or 'value' key."

>>> myElement = find_element(driver=myWebDriver.webdriver, field={"value":"html/body/span"})
Traceback (most recent call last):
...
KeyError: "The field argument doesn't contains either the 'type' or 'value' key."

The field key type value must be one of a limited list

type must be in a limited list of values:

  • id: when you want to retrieve the field by its id
  • name: when you want to retrieve the field by its name attribute's value
  • class_name: when you want to retrieve the field by one of its class value
  • link_text: when you want to retrieve the field by the exact match on the link text
  • partial_link_text: when you want to retrieve the field by a sub string of the link text
  • css: when you want to retrieve the field by its css path
  • xpath: when you want to retrieve the field by its xpath
  • tag_name: when you want to retrieve the field by its tag name

    myElement = find_element(driver=myWebDriver.webdriver, field={"type":"test", "value": "test"}) Traceback (most recent call last): ... ValueError: The field type is not one the expected: '('id', 'name', 'class_name', 'link_text', 'css', 'partial_link_text', 'xpath', 'tag_name')

TearDown

Close all windows

>>> myWebDriver.close()
0

Stop the web server

>>> myserver.stop()