2017-09-26 10 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秒間スリープしてからEnterキーを送信します。これはオートコンプリートから名前を取得するため必須ですので、名前を入力するだけです基本的には、ページには文字列を送信した後に値を取る時間が必要であり、入力キーがあまりにも速く、そのようには動作しません。ページには値を取得してEnterキーを送信する時間が必要です。

ありがとうございました。

+0

でより多くの情報を見つけることができます

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) 

をどうするかのアイデアを与える必要があり、この例では、多分あなたは[FluentWait](httpsを使用することができます:/を/sqa.stackexchange.com/questions/12866/how-fluentwait-is-different-from-webdriverwait)そして暗黙の待ちではない –

答えて

0

おそらく最初の2つの睡眠は必要ありません。最後のスリープ状態は、オートコンプリートドロップダウンが開くのを待つ明示的な待機に置き換えてください。基本的には、オートコンプリートドロップダウンに関連付けられた要素の可視性を待ちます。オートコンプリートドロップダウンの位置を知らない場合は、サイトへのリンクを共有するか、HTMLを投稿する必要があります。以下のコードは、あなたが私の意見ではpython docs

+0

ありがとうJeffC、あなたの解決策を働かせて、私が持っていた問題は私がテキストボックスの代わりにテキストボックスを指していたことでした。オートコンプリートのドロップダウン、あなたの助けに感謝します。 – user964503

+0

私はJeffCについて言及するのを忘れてしまっただけです。私は2番目の睡眠を使用していたので、上記のスクリプトを実行する前に新しいウィンドウが表示されるので、他のウィンドウが消えてしまうまで、今は動作しますが、後ろにあるページは編集可能ですので、2つのステップを同時に実行していますが、将来はページが編集できない場合は問題があります。 – user964503

+0

A新しいウィンドウで要素を見つけてそれが見えなくなるのを待つことです。そうすれば、あなたはそれがなくなるまで待つだけです。 – JeffC

関連する問題