1

Selenium2.0Webドライバーを使用しています。ページ内で何かを見つけようとすると、スクリプトが失敗することがあります。例外をスローします:

要素が見つかりません:{"method": "id"、 "selector": "username"};

私のコードの一部:

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

WebElement userName = driver.findElement(By.id("username"));
userName.clear();
userName.sendKeys("admin");

同じコードで成功することもあります。何が起こっているのかわかりません。

4

2 に答える 2

4

これは、ページの読み込みが予想よりも遅いために発生することがあります。私は自分のラッパーヘルパーを適用することで回避策を実行しています。次のようになります。

 private WebElement foundElement;

 public WebElement find(By by){
    for (int milis=0; milis<3000; milis=milis+200){
       try{
       foundElement = driver.findElement(by);

       }catch(Exception e){
         Thread.sleep(200);
       }

     }
    return foundElement;
 }

そしてコードの後半:

WebElement userName = find(By.id("username"));

このアプローチでは、それを見つけようとします。見つからない場合は、200ミリ秒スリープしてから、再試行します。3秒以内に見つからない場合(編集可能)、クラッシュします(おそらく、メソッドで例外がスローされると言わなければなりません)

ページの読み込み速度がわからない場合はいつでも適用します...

于 2012-04-05T20:14:51.343 に答える
3

問題の最善の解決策は、WebDriverWaitオブジェクトを使用してid要素がブラウザーにロードされるまでドライバーを待機させることです-

new WebDriverWait(driver, 10).until(new ExpectedCondition<Boolean>() {

        public Boolean apply(WebDriver arg0) {

            WebElement element = driver.findElement(By.id("username"));


            return element.isDisplayed();
        }
    });

これにより、ドライバーはid要素がロードされているかどうかのチェックを停止します。10秒以内にロードされない場合、timedOutExceptionがスローされます。

于 2012-04-20T07:34:57.940 に答える