Googleにナビゲートして検索を実行し、最初の結果ページのすべての結果のタイトルを取得する課題がありました。WebElementsをループしながらリストのインデックスをスキップしました。
私はxpathでfindElements
を使用し、各結果とdriver.navigate().back()
をループしようとしました。それはStaleElementReferenceException
を投げ、私はtry-catchブロックを書き、catchブロックのfindElements
を初期化し始めました。
私のfindElementsのsize()を取得しようとしているとき、暗黙の待機を使用したときに9と判定されていました。明示的なものを使用し、Thread.sleepとsize()も実際には13に設定されていました。これは私が期待していたものです。
すべてがうまくいくと、インデックスが6から12の後にスキップされるのがわかります。何が起きているのか分かりません。誰かが間違っていると私に言うことができますか?ありがとう!
以下が私のコードです:あなたが述べてきたように
@BeforeClass
public void setup() {
driver = LoadWebDriver.getWebDriver();
}
@Test(priority=0)
public void navigateTo() {
driver.manage().window().maximize();
driver.get("https://www.google.co.in/");
}
@Test(priority=1)
public void getTheTitles() throws InterruptedException {
String xPath = "//h3/a";
int a = 0;
boolean loopThru = true;
driver.findElement(By.id("lst-ib")).sendKeys("Java",Keys.ENTER);
// WebDriverWait wait = new WebDriverWait(driver, 10);
// wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath(xPath)));
// Thread.sleep(3000);
driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
List<WebElement> dan = driver.findElements(By.xpath(xPath));
System.out.println("** The fucking size is "+dan.size()+" **");
while(loopThru) {
try {
dan = driver.findElements(By.xpath(xPath));
for (int i = a; i < dan.size(); i++) {
if(i==dan.size()-1){
loopThru=false;
}
dan.get(a).click();
String theTitle = driver.getTitle();
System.out.println(a+" "+theTitle);
driver.navigate().back();
}
}
catch(Exception e) {
a++;
dan = driver.findElements(By.xpath(xPath));
loopThru = true;
}
}
}
@AfterClass
public void tearDown() {
driver.close();
}
ルックはおそらく助けるあなたはhttp://stackoverflow.com/questions/41999207/not-able-to-get-links-of-all-the-total-pages/42001030#42001030 – NarendraR