0

当我搜索这样的元素时:

driver.findElement(By.id("myId")).isDisplayed();

如果找到元素,我想运行一些代码(使用找到的 WebElement 我会将它滚动到视口的中间)。我想对 findElement() 的所有调用都这样做,而不必每次调用它时手动复制代码。

有没有办法做到这一点?

4

2 回答 2

3

您可以通过实施WebDriverEventListener. 这是一个例子,

public class WebDriverListener implements WebDriverEventListener {
    private WebDriver webDriver;

    public WebDriverListener(WebDriver webDriver) {
        this.webDriver = webDriver;
    }

    public void afterFindBy(By findBy, WebElement element, WebDriver driver) {
        System.out.println("Found element now what??");
        //do whatever needs to be done after you find the element
    }
        ....
}

这是如何使用

   @Test
    public void test() {
        WebDriver driver = new FirefoxDriver();
        EventFiringWebDriver efwd = new EventFiringWebDriver(driver);
        WebDriverListener eventListener = new WebDriverListener(driver);
        efwd.register(eventListener);
        efwd.get("http://www.google.com");
        WebElement element = efwd.findElement(By.name("q"));
        efwd.quit();
    }
于 2013-11-12T15:22:05.377 回答
0

我通过创建自己的自定义驱动程序来完成这项工作,但我宁愿有更好的方法来做到这一点。

public class CustomFirefoxDriver extends FirefoxDriver {

    /* (non-Javadoc)
     * @see org.openqa.selenium.remote.RemoteWebDriver#findElement(org.openqa.selenium.By)
     */
    @Override
    public WebElement findElement(final By by) {
        WebElement element = super.findElement(by);

        //Automatically Scroll to the Element
        if (element != null) {
            Actions builder = new Actions(this);
            Actions action = builder.moveToElement(element, 0, 0);
            action.perform();
        }

        return element;
    }

}
于 2013-11-12T04:46:26.377 回答