В настоящее время я программирую примеры в «Test-Driven Development with Python», точнее, первый функциональный тест.Force Selenium в Python, чтобы ждать, пока браузер не будет выполнен. Загрузка
Основные части моего кода следующим образом:
def setUp(self):
self.browser = webdriver.Firefox()
self.browser.implicitly_wait(20)
Я говорю Селен сделать неявное ожидание в течение 20 секунд до тех пор, пока не найдет то, что он ищет.
inputbox = self.browser.find_element_by_id('id_new_item')
self.assertEqual(
inputbox.get_attribute('placeholder'),
'Enter a To-Do item'
)
inputbox.send_keys('Buy peacock feathers')
inputbox.send_keys(Keys.ENTER)
table = self.browser.find_element_by_id('id_list_table')
rows = table.find_elements_by_tag_name('tr')
self.assertIn('1: Buy feather peacocks', [row.text for row in rows])
Самая большая проблема здесь в следующих строках:
inputbox.send_keys('Buy peacock feathers')
inputbox.send_keys(Keys.ENTER)
table = self.browser.find_element_by_id('id_list_table')
- Он пишет: «Купить павлиньи перья» в поле ввода.
- Он нажимает кнопку ввода.
- Это, сразу после, пытается найти предметы в таблице.
Проблема в том, что мой компьютер работает не так быстро. К тому моменту, когда элементы найдены, браузер все еще пытается загрузить скрипт, и утверждение не выполняется.
Я знаю, что существует два типа ожиданий для Селена: неявный (уже примененный) и явный (некоторые исследования на нем). Мои проблемы с обеими являются следующими:
- неявных ожидания бесполезны, потому что элементов находятся, независимо от того, детали, что я ищу, или нет.
- Явные ожидания бесполезны, потому что страница такая же как до, так и после отправки формы, и как таковой ждать нечего.
time.sleep()
зависает, если используется слишком много.- Да, я также проверил, что
item_text
правильно ссылки, в том числеname
атрибута :)
Каковы мои другие варианты? Что я могу сделать, чтобы заставить Selenium ждать, пока страница не будет загружена? Спасибо заранее.
EDIT: вид выглядит следующим образом, следуя примеру в книге.
<html>
<head>
<title>Lista de Quehaceres</title>
</head>
<body>
<h1>Tu Lista de Quehaceres</h1>
<form method="POST">
<input id="id_new_item" name="item_text" placeholder="Entre un ítem de quehacer" />
{% csrf_token %}
</form>
<table id="id_list_table">
<tr><td>1: {{ new_item_text }}</td></tr>
</table>
</body>
</html>
Я пытаюсь следовать примеру в книге, и таблица присутствует с самого начала. Я редактировал свой OP с кодом вида. –
@ user1231958 okay, gotcha, обновлено с новой идеей. Надеюсь, поможет. – alecxe
Я собираюсь принять ваш вопрос, потому что я понял, что случилось что-то еще, что убивает Селен, но я понятия не имею, что это может быть. И ваша идея тоже будет полезна! Спасибо! –