4

次のシナリオがあります。

ページに移動したい。次に、ボタンが表示されたらすぐにクリックします(ページがロードされるのを待たずに)。時間がかかるので、最初のページが読み込まれるのを待ちたくありません。私のプログラムは現在、ページがロードされてボタンがクリックされるまでスタックしています。

私は基本的にリンクに移動し、ページを待たずにコードを続行したいと考えています。

とにかくこれの周りはありますか?

4

3 に答える 3

3

.NET バインディングの最新バージョンでは、ページ読み込みタイムアウトを設定できます。ただし、注意が必要な点がいくつかあります。まず、これはすべてのブラウザーで実装されているわけではありません。メモリが機能する場合、IE と Firefox で動作するはずです。第二に、それを適切に機能させるために例外をキャッチする必要がありますが、それは可能です。

// WARNING! Completely untested code written without
// the benefit of an IDE!
IWebDriver driver = new InternetExplorerDriver();
driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(1));

try
{
    driver.Url = "http://your.long.loading.page.com";
}
catch (TimeoutException) 
{
    // NOTE: In 2.26 or later, this will be WebDriverTimeoutException
}

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement element = wait.Until<IWebElement>((d) => 
{
    return d.FindElement(By.Id("yourId"));
}
于 2012-08-14T00:05:13.483 に答える
2
IWebDriver driver = new FirefoxDriver();
driver.Url = "http://somedomain/url_that_delays_loading";
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement myDynamicElement = wait.Until<IWebElement>((d) =>
{
    return d.FindElement(By.Id("someDynamicElement"));
});

それはまさにあなたが望むことをします。ページを照会して要素を見つけ、要素が見つからない場合は例外をキャッチし、見つかった場合は要素を返します。

その後、ページが読み込めないことを無視してボタンを操作できます

http://seleniumhq.org/docs/04_webdriver_advanced.html

于 2012-08-12T18:27:42.750 に答える
0

簡単な答え: いいえ。

長い答え: Selenium は、デフォルトで実際のユーザーをシミュレートしようとしています。特に、展開後に展開後に展開をテストする必要がある場合は、ちょっと面倒だと思います...

しかし:実際のユーザーがボタンが表示されるのを待たなければならない場合、プログラムもそれを行う必要があります...

ところで:ボタンがページの最初に実際に表示される場合は、これを試すことができます:

  1. ID、xpath ... でボタンを検索します。
  2. 例外をキャッチする (私は Java の専門家なので、方法は聞かないでください)
  3. エラーが発生した場合は、短時間 (例: 200 ミリ秒) 待ってから 1 に進みます。
  4. そうでない場合は、ボタンをクリックします
  5. 一定時間(10秒)が経過するとサイクルも終了し、そうであれば例外をスローします

上で述べたように: 私が選んだ言語は Java です。そこに私はそれを行うことができます。しかし、私はC#でそれを書く方法を知りません

于 2012-08-12T14:34:11.873 に答える