Отличные ответы до сих пор, но некоторые лакомые кусочки отсутствуют. Единственное главное подчеркивание - это не совсем только соглашение: если вы используете from foobar import *
, а модуль foobar
не определяет список __all__
, имена, импортированные из модуля, не включают те с лидирующим подчеркиванием. Предположим, что это в основном конвенция, поскольку этот случай является довольно неясным углом; -).
Соглашение с ведущим-подчеркиванием широко используется не только для private , но также и то, что C ++ вызывал protected - например, имена методов, которые полностью предназначены для переопределения подклассами (даже те, которые должны быть переопределены, поскольку в базовом классе они raise NotImplementedError
! -) часто являются именами одного и того же нижнего подчеркивания, указывающие на код с использованием экземпляров этого класса (или подклассов), в котором упомянутые методы не предназначены для прямого вызова.
Например, для создайте поточно-безопасную очередь с другой дисциплиной очередей, чем FIFO, один импортирует Queue, subclasses Queue.Queue и переопределяет такие методы, как _get
и _put
; «клиентский код» никогда не вызывает эти методы («крючок»), а скорее («организующие») общедоступные методы, такие как put
и get
(это известно как шаблон дизайна Template Method ] - см., например, здесь для интересной презентации, основанной на видеоролике моего разговора по этому вопросу, с добавлением кратковременных расшифровки стенограммы).
возможно driver.find_elements_by_link_text("MISCQA Misc Tests")[0].click()
или другой индекс ...
Я не знаю Selenium, но я думаю, что find_elements_by_link_text находит больше чем одно, или, возможно, метод всегда возвращает список, а не один объект. Если вы абсолютно уверены, что результатом поиска будет только один объект, чем использовать [0], как я уже упоминал, если вы не можете предположить, что будет только один объект, вам нужно придумать более сильный стратегия
Оператор driver.find_elements_by_link_text("MISCQA Misc Tests")
возвращает список WebElement, некоторые из которых не могут быть доступны для клика.
Таким образом, вам нужно будет просмотреть список возвращаемых WebElement и затем щелкнуть по тем элементам, которые можно щелкнуть.
Вы можете проверить, является ли WebElement доступным или нет, с помощью функции isClickable()
.
Я не размещал код, потому что я не знаю Python. Надеюсь, это вам поможет.
, если атрибут «MISCQA Misc Tests» имеет только один, вы можете попытаться изменить элементы на элемент в этом коде «driver.find_elements_by_link_text (« MISCQA Misc Tests »)« Надеемся, что проблема будет исправлена
, если вам нужен один элемент, поэтому вы можете использовать:
driver.find_element_by_link_text("MISCQA Misc Tests")
или если вы хотите весь список, то:
for x in self.driver.find_elements_by_link_text("MISCQA Misc Tests"):
link = webdriver.ActionChains(self.driver).move_to_element(x).click(x).perform()