What should I import for Selenium's By.XPATH?
Question:
The new version of Selenium doesn’t have any old methods, like .find_element_by_xpath()
, but it introduced the new fabrique method .find_element(By.XPATH, searched_string)
. Here is the example from the documentation:
vegetable = driver.find_element(By.CLASS_NAME, "tomatoes")
But it does not work, because ‘By‘ is not defined. I can’t find the example what to import to use this pattern. In Java it is:
import org.openqa.selenium.By;
And what should I do in Python?
Answers:
You have to import the class By
from selenium.webdriver.common.by import By
from selenium.webdriver.common.by import By
selenium.webdriver.common.by
As per the documentation of the By
implementation:
class By(object):
"""
Set of supported locator strategies.
"""
ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
So when you use By
you have to import:
from selenium.webdriver.common.by import By
Usage
-
For CLASS_NAME:
vegetable = driver.find_element(By.CLASS_NAME, "tomatoes")
-
For XPATH:
vegetable = driver.find_element(By.XPATH, "//element_xpath")
The new version of Selenium doesn’t have any old methods, like .find_element_by_xpath()
, but it introduced the new fabrique method .find_element(By.XPATH, searched_string)
. Here is the example from the documentation:
vegetable = driver.find_element(By.CLASS_NAME, "tomatoes")
But it does not work, because ‘By‘ is not defined. I can’t find the example what to import to use this pattern. In Java it is:
import org.openqa.selenium.By;
And what should I do in Python?
You have to import the class By
from selenium.webdriver.common.by import By
from selenium.webdriver.common.by import By
selenium.webdriver.common.by
As per the documentation of the By
implementation:
class By(object):
"""
Set of supported locator strategies.
"""
ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
So when you use By
you have to import:
from selenium.webdriver.common.by import By
Usage
-
For CLASS_NAME:
vegetable = driver.find_element(By.CLASS_NAME, "tomatoes")
-
For XPATH:
vegetable = driver.find_element(By.XPATH, "//element_xpath")