2

Webブラウザを介して制御されるシステム用のSelenium APIに基づいたAPIを作成しています(ルーターやスイッチを制御する方法と同様です)。

この API で行われることの 1 つは、特定の要素がページに存在するかどうかを確認することです (設定に応じて、テキスト ボックスや一部のステータスなど、要素が終了する場合と終了しない場合があります)。

私はこの行を持っています:

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

ある時点で実行するまでは問題なく動作していましたが、driver.findElement(By....); タイムアウトしたことはありません(要素がWebページにありませんでした)...私が最も長く待ったのは約30分でした。

ホストとして Ubuntu 12.04 x64、ゲストとして Windows 7 を実行しています。その上に、Selenium API と、製品を制御する Java で記述されたコードがあります。同じコードを別の Windows VM または別のワークステーションに移植すると、正常に動作します。ただし、私の特定の VM ではありません。

Eclipse の「再インストール」を試み、Selenium JAR を再インポートし、サーバーから最新の作業コードを取り出しました...何も機能しません...

どう思いますか?

どんな反応でも感謝します。ありがとう。

4

1 に答える 1

0

まず、fluentWait を使用して、ページ上のすべての AJAX を待機してみてください。

 public WebElement fluentWait(final By locator){
        Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
                .withTimeout(30, TimeUnit.SECONDS)
                .pollingEvery(5, TimeUnit.SECONDS)
        .ignoring(org.openqa.selenium.NoSuchElementException.class);
        WebElement foo = wait.until(
                new Function<WebDriver, WebElement>() {
                    public WebElement apply(WebDriver driver) {
                        return driver.findElement(locator);
                    }
                }
        );
        return  foo;              }     ;
fluentWait(By.xpath(....blablabla..)).click();
//fluentWait(By.xpath(....blablabla..)).getText();

Thead.sleep(1000);第二に、代わりに使用してみてください

driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
于 2012-11-29T20:23:36.547 に答える