Python «Ошибка атрибута» при объединении шагов - PullRequest
0 голосов
/ 06 марта 2019

Надеясь, что кто-то может помочь объяснить разницу в коде новичку.
Использование Python для запуска Selenium и навигации по странице с использованием XPath и нажатия ().

Это работает:

xpath = '//*[@id="blahblah"]'
date = driver.find_element_by_xpath(xpath)
date.click()
date.send_keys('todaysdate')

Это не работает:

xpath = '//*[@id="blahblah"]'
date = driver.find_element_by_xpath(xpath).click()
date.send_keys('todaysdate')

Ошибка возвращается:

AttributeError: 'NoneType' object has no attribute 'send_keys'

В чем разница между примерами?

Ответы [ 2 ]

3 голосов
/ 06 марта 2019

Это не работает, потому что вы пытаетесь сохранить возвращаемое значение click() в дате.'click ()' ничего не возвращает, иначе None, поэтому вы получаете ошибку атрибута при попытке вызвать send_keys для этого объекта NoneType.

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

Тем не менее, это субъективно, и могут быть ситуации, когда объединение вызовов методов - это путь (например, чтобы сэкономить немного памяти).Тем не менее, таких ситуаций мало и далеко между ними.

3 голосов
/ 06 марта 2019

Ваш код будет работать, только если date.click() вернет дату снова. Это не так (и было бы довольно необычно). В существующем состоянии click() выполняется, но возвращается None, поэтому попытка send_keys для None не удалась.

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