0

<select>要素といくつかのsを含むページが<option>ある場合、クリックすると、ブラウザは次のような新しいURLを開きます(JavaScriptコードは省略)。

<select>
  <option value="here">go here</option>
  <option value="there">go there</option>
</select>

WebDriverを使用してこの動作を自動化すると、

hereOrThereSelectElement.SelectByValue("here");

次に、新しいページが読み込まれるまで待機します。

私の場合、新しい場所のページの読み込みには(意図的に)60秒以上かかるため、WebDriverインスタンスのコマンドタイムアウトを増やす必要がありました。残念ながら、このタイムアウトは、同じWebDriverインスタンスで作成された他のすべてのテストに影響します。

また、新しいページが読み込まれるのを明示的に待機します(テストシナリオで長時間実行されていることを示すため)が、この状態では、SelectByValueコマンドが成功した後に次のコマンドが呼び出されるため、待機は必要ありません。

ソースを調べたところ、SelectByValueコマンドはClick必要に応じてページの読み込みを待機するロジックを使用していることがわかりました。

だから私の質問は:新しいページがロードされるのを待たずに明示的に(または)を実行するにはどうすればよいですか?SelectByValueClick

更新: コードに実際に入れたいのは次のとおりです。

// the following command should not wait for the new page to load
hereOrThereSelectElement.SelectByValueButDoNotWait("here");
webDriverWait.Until(/* some "page has loaded" check */)
4

1 に答える 1

0

最後に、私はこれに対する解決策を見つけました。

Click()一方、問題は、タイムアウトに遭遇したWebElementのメソッドの呼び出しにわずかにシフトしました。それでも、次の解決策は、の呼び出しに関する元の問題にも当てはまりますSelectByValue()

したがって、SeleniumのActions低レベルのインタラクションビルダーを使用して、要素をクリックすることができます。

var actions = new Actions(webDriver);
actions
  .MoveToElement(aClickableWebElement);
  .Click();
  .Build()
  .Perform();

多分これは同様の問題を抱えている人を助けるでしょう。

于 2012-11-30T13:56:55.143 に答える