2017-09-26 73 views
0

我試圖用明確的等待此代碼更改爲:使用顯式等待自動完成硒

class InputAutocompleteElement(InputElement): 
    def __set__(self, obj, value): 
     driver = obj.driver 
     element = self.find_element(driver, self.locator) 
     time.sleep(3) 
     element.clear() 
     time.sleep(1) 
     element.send_keys(value) 
     time.sleep(3) 
     element.send_keys(Keys.RETURN) 

我在做什麼上述線路是:第一,要睡覺了腳本3秒,然後清空文本框,然後睡眠另一秒,然後發送字符串,然後再睡3秒,然後發送一個回車鍵,因爲這是強制性的從自動完成名稱,不可能只輸入名稱,我的問題主要是發送字符串後頁面需要時間取值,而我發送回車鍵太快而不起作用,頁面需要時間取值再發送回車鍵。

謝謝。

+0

在我看來更多的信息,在這個例子中的想法,也許你可以使用[FluentWait(HTTPS:/ /sqa.stackexchange.com/questions/12866/how-fluentwait-is-different-from-webdriverwait)而不是隱含的等待 –

回答

0

你可能不需要頭兩個睡覺。您應該用等待自動完成下拉列表打開的顯式等待替換上次的睡眠。基本上,您等待與自動填充下拉列表關聯的某個元素的可見性。如果您不知道如何找到自動填充下拉菜單,則必須共享該網站的鏈接或張貼HTML。下面的代碼應該給你做什麼

from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

... 

class InputAutocompleteElement(InputElement): 
    def __set__(self, obj, value): 
     driver = obj.driver 
     element = self.find_element(driver, self.locator) 
     element.clear() 
     element.send_keys(value) 
     WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, "idOfAutocompleteDropdown")) 
     element.send_keys(Keys.RETURN) 

您可以找到python docs

+0

謝謝JeffC,解決你的問題,我遇到的問題是我指向的文本框,而不是自動完成下拉列表,我感謝您的幫助 – user964503

+0

只有一件事我忘了提及JeffC,我使用了2次第一次睡眠,因爲在運行上面的腳本之前在步驟中出現了一個新窗口,所以這就是爲什麼我想等幾個seco直到其他窗口消失,現在可以工作,但它同時執行2個步驟,因爲即使其他窗口已打開,但後面的頁面不可編輯,我仍然會遇到問題 – user964503

+0

A比睡眠更好的解決方案是在新窗口中找到一個元素並等待它不可見。這樣你只需要等到它消失。 – JeffC