【尚未解决】关于webdriver中浏览器从页面回退后通过id/xpath取得元素出错的问题

来源:互联网 发布:java小型购物网站设计 编辑:程序博客网 时间:2024/04/28 13:16
背景:在学习用EventFiringWebDriver做事件侦听时,从豆瓣首页跳转到百度首页,然后navigate().back()回到豆瓣的时候,点击豆瓣搜索按钮时,用By.xpath(),就报错:

org.openqa.selenium.StaleElementReferenceException: Element not found in the cache - perhaps the page has changed since it was looked up

...


但是换成By.name()的时候就没问题。

代码为:

(1)MyEventListener.java

package com.aikachin.selenium;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.support.events.AbstractWebDriverEventListener;/** * @Author: AIkachin * @Description: * @Date: Created in 17:21 2017/10/18 0018. * @Modified by : */public class MyEventListener extends AbstractWebDriverEventListener {    @Override    public void afterNavigateTo(String url, WebDriver driver) {        System.out.println("After navigate to : " + url);    }    @Override    public void afterNavigateBack(WebDriver driver) {        System.out.println("After navigate back to : " + driver.getCurrentUrl());    }    @Override    public void afterClickOn(WebElement element, WebDriver driver) {        System.out.println("After click on : " + element.getText());    }}
(2)testWebDriverEvent.java部分代码

使用By.name()就没问题

    @Test    public void testWebDriverEvent() throws Exception {        driver = new FirefoxDriver();        EventFiringWebDriver eventFiringWebDriver = new EventFiringWebDriver(driver);        MyEventListener myEventListener = new MyEventListener();        eventFiringWebDriver.register(myEventListener);        eventFiringWebDriver.get(URLofDouban);        Thread.sleep(1000);        eventFiringWebDriver.get(URLofBaidu);        eventFiringWebDriver.navigate().back();        Thread.sleep(1000);        eventFiringWebDriver.findElement(By.xpath(".//*[@id='anony-nav']/div[2]/form/span[2]/input")).click();        // eventFiringWebDriver.findElement(By.name("q")).click();    }