Разница между публичным и частным методами выбора - PullRequest
0 голосов
/ 26 июня 2018

Я просто читаю эту документацию здесь и мне было любопытно: В чем разница между публичными и приватными методами в этом контексте?

Комунайти несколько элементов (эти методы будут возвращать список):

find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_ss_________e_e_e_e_ell_se_name__e_e_e_e_ellиз открытых методов, приведенных выше, есть два частных метода, которые могут быть полезны с локаторами в объектах страницы.Это два частных метода: find_element и find_elements.

Я не понимаю, почему некоторые из них являются публичными методами, тогда как другие являются частными методами, и это нигде не объясняется.

После выполнения теста я заметил, что существуют различия в FirefoxWebElement для открытых и закрытых селекторов.

find_element_by_xpath('//whatever') возвращает

<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="234a0c66-870f-4fee-92b5-8d10541f2d2d", element="3275635e-614d-42da-95ac-306b02743bec")>

session="234a0c66-870f-4fee-92b5-8d10541f2d2d"
element="3275635e-614d-42da-95ac-306b02743bec"

find_element(By.XPATH, '//whatever') возврат

<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="c792073f-08b3-4519-a563-0f1e272a17e7", element="b61a6d2d-2c35-4872-a8e0-2649c189829b")>

session="c792073f-08b3-4519-a563-0f1e272a17e7"
element="b61a6d2d-2c35-4872-a8e0-2649c189829b"

Меня не удивляет, что session отличается, но почему он возвращает другое значение для element?!

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Если вы посмотрите на определение find_element_by_xpath

def find_element_by_xpath(self, xpath):
    return self.find_element(by=By.XPATH, value=xpath)

Используется метод find_element.Теперь, почему find_element задокументировано как частное?Ну, несколько вещей

  • Рассматриваемый первоначальный разработчик имел личное предпочтение кодировать его таким образом
  • Как бы вы находили, когда у вас есть исходные коды, использующие find_element_by_xpath, а некоторые - find_element(By.XPATH, "//div")?Это сбивает с толку, поэтому лучше просто поддерживать его согласованным
  • Python обычно используется более по-английски, поэтому find_element_by_xpath clear объясняет намерение
  • Можно ли использовать find_element вместо find_element_by_XXXX?Почему бы и нет, в моей библиотеке помощников Селена я использую только это.

Так что мои мысли о том же самом, первоначальный участник этой строки, вероятно, мог сказать, что его намерения заключаются в том, чтобы сделать метод закрытым

0 голосов
/ 26 июня 2018

Есть два способа получить веб-элемент:

element = driver.find_element_by_id("some static id")  

и :

element = driver.find_element(By.ID, 'some static id')  

Более или менее они оба возвращают вебэлемент .

Итак, find_element(), который является приватным методом, имеет некоторые преимущества, такие как:

Если вы хотите найти тот же элемент с помощью CSS_SELECTOR или XPATH для новых сборок:

Вы могли бы сделать что-то вроде:

element = driver.find_element_by_css_selector("some css selector") 

, но в случае метода find_element () private:

element = driver.find_element(By.CSS_SELECTOR, 'some css selector') 

Как сказано в официальных документах: частные методы, которые могут быть полезны с локаторами в объектах страницы.

объект страницы означает ремонтопригодность вашего проекта, и вы будете иметь свои локаторы в INI-файле или на фабрике страниц.Поэтому, используя метод Private, если вам нужно что-то изменить во время регрессии или чего-то еще, было бы легко изменить значение только в одном месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...