背景:在学习用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()的时候就没问题。
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();
}