3

IWebElement が DOM に (再) 接続されるのを待つにはどうすればよいでしょうか? 私のシナリオは、ドロップダウン1から1つの値を選択し、クリックした後にドロップダウン2でデータバインディングが発生するようになります。したがって、Dd1 から「foo」を選択し、Dd2 から「bar」を選択するようにテストすると、例外が発生します。Dd2 がまだレンダリングされていないため、競合状態が発生します。これで、WebDriverWait クラスがあり、Until メソッドを次のように使用できることがわかりました。

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
wait.Until(By.Id("foo"));

しかし、ロケーター文字列 ("foo") をテスト ロジックに持ち込むのは本当に嫌です。Page オブジェクト モデルを使用する場合、私は既に IWebElement インスタンスを持っています

[FindsBy(How = How.Id, Using = "ctl00_MainContentPlaceHolder_actionButtonBarControl_btnSave")]
    public IWebElement BtnSave { get; set; }

では、IWebElement が通信できるようになるまで暗黙的に待機する方法を知っていますか?

4

3 に答える 3

1

平均を使用したくない場合はlocator values、明示的待機を使用する代わりに暗黙的待機を使用できます。暗黙の待機も、driverインスタンスを一定時間待機させます。

Actual difference to Explicit Wait is that it will tell Web driver to poll the DOM for a certain amount of time when trying to find an element or elements if they are not immediately available.The default setting is 0.

コード:

  driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

覚えておくべきことの 1 つは、暗黙的な待機が設定されると、WebDriver オブジェクト インスタンスの存続期間中そのままであるということです。

詳細については、このリンクを使用してください http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebDriver.Timeouts.html#implicitlyWait(long,java.util.concurrent.TimeUnit)

于 2013-01-22T13:40:59.433 に答える
0

のように生のセレクタ テキストを渡しますseleniumRC css=a, xpath=b

次にfindElement、リクエストを解析し、適切なものを取得Byして要素を検索するメソッドがあります

于 2016-08-31T11:56:45.397 に答える