According to documentation find_element()
seem to be kind of "private" method that is used by find_element_by_...()
methods and also might be used in Page Object
So using Page Object pattern is the reason why you might need find_element()
+ By
instead of find_element_by_...()
.
For example, you have some variable that contains elements' id
value
link_id = "some_id"
and you use it to locate element as
my_link = driver.find_element_by_id(link_id)
If for some reason id
attribute was removed from element, you need both to update selector and replace find_element_by_...()
method in my_link
as
link_class_name = "some_class_name"
my_link = driver.find_element_by_class_name(link_class_name)
If you use By
, then your initial locator might be
link_locator = (By.ID, "some_id")
and you locate your element as
my_link = find_element(*link_locator)
In case of changes in HTML
source you need just to update your link_locator
as
link_locator = (By.CLASS_NAME, "some_class_name")
and my_link
remains exactly the same