1
我目前正在編寫「Test-Driven Development with Python」中的示例,更具體地說是第一個功能測試。是在Python中強制Selenium以等待瀏覽器完成加載
我的代碼的關鍵部分如下:
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')
- 它寫道:「賣孔雀羽毛」在輸入框中。
- 它按下輸入。
- It,緊接在之後,試圖找到表中的項目。
問題是我的電腦沒那麼快。在找到這些項目時,瀏覽器仍在嘗試加載腳本,並且聲明失敗。
我知道等待Selenium有兩種類型:隱式(已應用)和顯式(對其做了一些研究)。我有兩個問題如下:
- 隱等待都是無用的,因爲項目被發現,項目無論是什麼,我找與否。
- 顯式等待是無用的,因爲頁面在發送表單之前和之後都是相同的,因此沒有什麼可以等待。
time.sleep()
如果使用太多,會掛起腳本。- 是的,我也檢查了
item_text
被正確引用,包括name
屬性:)
我有什麼其他選擇?我能做些什麼來強制Selenium等待頁面加載?事先謝謝你。
編輯:視圖如下,遵循書中的例子。
<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好,gotcha,更新了一個新的想法。希望能幫助到你。 – alecxe
我會接受你的問題,因爲我發現了一些其他的事情正在殺死Selenium,但我不知道它會是什麼。而且,你的想法也會很有用!謝謝! –