検索結果のすべてのタイトルをページごとに印刷しようとしています。次のボタンを使用してGoogle検索ページをナビゲートし、WebDriverでリンクタイトルを印刷する
Googleを検索し、最初のページのタイトルを印刷すると成功します。しかし、次のボタンをクリックして2番目のページのタイトルを印刷しようとすると、エラーが発生します。
最初のページの次のボタンをクリックして2番目のページタイトルを印刷するにはどうすればよいですか?
マイコード:
public class goopick {
public static void main(String[] args) {
WebDriver driver = new FirefoxDriver();
searchGoogle(driver, "Selenium Interview Questions");
printSiteNames(getSiteNames(driver));
clickNextButton(driver);
printSiteNames(getSiteNames(driver));
}
private static List<WebElement> getSiteNames(WebDriver driver){
return driver.findElements(By.xpath("//*[@id='rso']/div/div/div[@class='rc']/h3/a"));
}
private static void searchGoogle(WebDriver driver, String searchString) {
driver.get("https://www.google.co.in/?gfe_rd=cr&ei=LSX1VvXDLKmumQW7irJw&gws_rd=ssl");
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.findElement(By.id("lst-ib")).sendKeys(searchString);
driver.findElement(By.className("lsb")).click();
}
private static void printSiteNames(List<WebElement> sitenames) {
int i = 1;
System.out.println("----------------------------------xxxx----------------------------");
for (WebElement sitename : sitenames) {
String site = sitename.getText();
System.out.println(i + ") " + site);
i++;
}
System.out.println("----------------------------------xxxx----------------------------");
}
private static void clickNextButton(WebDriver driver) {
WebElement NextButton = driver.findElement(By.xpath("//a[@id='pnnext']/span[2]"));
NextButton.click();
System.out.println("Next Button Clicked");
driver.navigate().forward();
}
}
出力およびエラー:プラビーン・クマール@
Exception in thread "main" org.openqa.selenium.StaleElementReferenceException: Element not found in the cache - perhaps the page has changed since it was looked up
Command duration or timeout: 30.79 seconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/stale_element_reference.html
デバッグがお手伝いします!! –
次のページボタンがXHR要求を開始することに注意してください。つまり、Seleniumはリクエストの完了を待たず、単に実行を続行します。ボタンを押すと、おそらく最初のページから要素が取得されます(更新は即時ではありません)。タイトルを手に入れようとすると、ページは既に新しい結果で更新されており、最初のページのタイトルはもう存在しません。続行する前に2ページ目が読み込まれるまで待ちます。 – skandigraun
[次へ]ボタンをクリックした後で待ちます。 – noor