0

メイン ウィンドウで、ポップアップ ウィンドウを開くリンクをクリックしようとしています。そのウィンドウからテキストを取得して閉じます。ここでも、メイン ウィンドウの約 40 個のリンクに対してこれを繰り返します。

しかし、3〜4回ループした後、失敗しています。なぜそれが起こっているのか分かりません。ほとんどの場合、条件が満たされない場合に発生しますが、それ以外の場合にも発生する可能性があります。

次のエラーが表示されます。

java.util.NoSuchElementException
at java.util.LinkedHashMap$LinkedHashIterator.nextEntry(Unknown Source)
at java.util.LinkedHashMap$KeyIterator.next(Unknown Source)

ここに私のコードスニペットがあります:

for(int x=1;x<119;x+=3)
{
    //waitforelement.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='resultsTable']/tbody/tr["+x+"]/td[2]/a")));

    WebElement element = driver.findElement(By.xpath("//*[@id='resultsTable']/tbody/tr["+x+"]/td[2]/a"));

    Actions builder = new Actions(driver);
    builder.moveToElement(element).click().build().perform();
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

    Set <String> windowids = driver.getWindowHandles();
    Iterator <String> iterat = windowids.iterator();

    String mainwindowid = iterat.next();
    String next1stwindowid = iterat.next();

    driver.switchTo().window(next1stwindowid);
    String pageSource = driver.getPageSource();

    Thread.sleep(750);
    if(!pageSource.contains("Resume is no longer available."))                  
    {
        String Name = driver.findElement(By.xpath("//*/body/table/tbody/tr[4]/td[2]/table/tbody/tr[1]/td[1]/div[2]/span[1]")).getText();
        String Phone = driver.findElement(By.xpath("//*/body/table/tbody/tr[4]/td[2]/table/tbody/tr[2]/td")).getText();
        String Email = driver.findElement(By.xpath("//*/body/table/tbody/tr[4]/td[2]/table/tbody/tr[3]/td")).getText();
        System.out.println("On page "+i+", the detail for list number "+x + "\t candidate is: " +Name +"\t"+ Phone+"\t"+Email);                         
    }

    Thread.sleep(750);
    driver.close();
    Thread.sleep(1000);
    driver.switchTo().window(mainwindowid);                                             
}
4

2 に答える 2

0

通常の Selenium 待機を使用しても問題が解決しない場合は、fluent 待機を使用してみてください。

于 2013-05-07T04:16:34.237 に答える
0

Thread.Sleep@aimbire がコメントで示唆しているように、できるだけ使用を避ける必要があります。代わりに、WebDriverWait クラスを使用することをお勧めします。これにより、最大タイムアウトと条件 (ページにテキストが含まれているかなど) を設定できます。スリープを使用するということは、サーバーがテストの反復ごとに同じ時間内にアクションを達成しない場合、直面しているような矛盾が発生する可能性があることを意味します。

于 2013-05-06T22:43:43.977 に答える