12

ストーリー:FluentWait class Javaのセレン言語バインディングでの制御ポーリング頻度

があり、しっかりと予想される状態がチェックされる方法を制御することができます:

各FluentWaitインスタンスは、 を条件として待機する最大時間と、 の条件を確認する頻度を定義します。さらに、ユーザは、待機中に の特定のタイプの例外を無視する待機を構成することができます(たとえば、 NoSuchElementExceptionsはページ上の要素を検索します)。

つまり、予想される条件チェックが適用されるポーリング間隔を変更することができます。デフォルトは500msです。さらに、無視する例外を設定することもできます。

also possible in Pythonであり、WebDriverWaitクラスに関連するpoll_frequencyignored_exceptions引数があります。

質問:

は分度器/ WebDriverJSでbrowser.wait()を使用するときに予想される状態が確認されているポーリング頻度を制御することが可能ですか?


​​によると、唯一の3つの可能な引数がある:期待状態である機能、タイムアウト値およびオプションのタイムアウトエラーメッセージが。私は、ポーリング頻度を変更するための設定や方法が異なることを願っています。

+2

JSはできるだけ早く投票するようですが、[This](https://github.com/SeleniumHQ/selenium/blob/master/javascript/webdriver/webdriver.js#L657)です。だから、基本的に私はそれがあなたが望むパラメータを持っているとは思わない。しかし、おそらく2つの回避策が考えられます: 1.条件が真でなければ内部的にスリープして、 を返すカスタムの 'Condition'を書いてください。2.代わりに' Promise'を作ってください。同じ文書によって違う動作をします。 3。 3番目のオプションは、 'wait'を書き換えたり、カスタム関数でラップしたりすることです。しかし良いオプションではありません。 @KirilS。 –

+0

。もう少し研究を重ね、あなたの答えを要約しました。再度、感謝します! – alecxe

答えて

9

は、さらなる研究とWebdriverJS source codeを検査した後、私はjavascriptのセレンバインディングの「ポーリング頻度」などというものは存在しないと結論付けることができます。後続の条件チェック呼び出しの間隔は設定できません。できるだけ早くチェックを実行します。

予想される条件状態チェックの間に設定可能なタイムアウトがあるPythonまたはJavaセレンのバインディングとは異なります。デフォルトでは、it would wait for 500ms before the next check:それが正常に戻るまで、デフォルトで

WebDriverWaitは、すべて500ミリ秒 ExpectedConditionを呼び出します。成功した戻り値は です。ExpectedConditionタイプはブール値で、それ以外のExpectedConditionタイプでは戻り値は です。

1

私が読んだドキュメントによれば、FluentWaitの機能を反映した実際の方法ではないようです。代わりに、このスニペットを使用してポーリング頻度を変更し、ほぼすべての例外(ほぼすべて)をエスケープします。

def wait_until(predicate, timeout_seconds, period=0.25, show_log=True): 
    """ 
    @summary Call repeatedly the predicate until it returns true or timeout_seconds passed. 
    @param predicate: a condition, modelized as a callable, that will valued either as True or False 
    @param timeout_seconds: the timeout in second 
    @param period: the time to sleep between 2 calls to predicate. Defaults to 0.25s. 
    @return True if a call to predicate returned True before timeout_seconds passed, else False 
    """ 
    if show_log: 
     myLogger.logger.info("waiting until predicate is true for {end} seconds".format(end=timeout_seconds)) 
    ultimatum = time.time() + timeout_seconds 
    while time.time() < ultimatum: 
     myLogger.logger.debug("checking predicate for wait until : {spent}/{end}".format(spent=str(time.time() - (ultimatum - timeout_seconds)), end=timeout_seconds)) 
     try: 
      if predicate(): 
       return True 
      time.sleep(period) 
     except Exception as e: 
      myLogger.logger.warn("Exception found: {}".format(e)) 
    return False 

その結果、述語は、あなたが質問の下WebElementの状態を検証する渡すことlambdaすることができます。 @Kirill S.の助けを借りて

+0

参加していただきありがとうございます!それはPythonベースのソリューションですか?質問はProtractor/WebDriverJSについてです。 – alecxe

+0

はい、それはPythonベースですが、私は同じ考えがjavascriptに適用できると思います。 – Abhinav

+0

このようなことがあなたを助けましたか? – Abhinav

関連する問題