繁体   English   中英

自定义WebDriver无法与Selenium Actions方法交互

[英]Custom WebDriver cannot interact with Selenium Actions methods

我不得不使用Selenium Actions类来使用doubleclick方法来与页面上的某些元素进行交互。 使用WebDriver可以正常工作( driver = DriverFactory.open(browserType); ),但是当我将其转换为下面的自定义WebDriver时,不会执行双击。

当我在调试模式下运行时,可以看到使用自定义驱动程序调用了doubleclick方法,但是鼠标被评估为null。

有谁知道为什么我的自定义驱动程序不能与Actions一起使用?

package utilities;

import java.util.List;
import java.util.Set;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

public class CustomWebDriver implements WebDriver, JavascriptExecutor
{
    private WebDriver driver;

    private boolean hasQuit = false;

    public CustomWebDriver(String browserType) 
    {
        driver = DriverFactory.open(browserType);
        hasQuit = false;
    }

    @Override
    public void get(String url)
    {
        driver.get(url);
    }

    @Override
    public String getCurrentUrl()
    {
        return driver.getCurrentUrl();
    }

    @Override
    public String getTitle()
    {
        return driver.getTitle();
    }

    @Override
    public List<WebElement> findElements(By by)
    {
        return driver.findElements(by);
    }

    @Override
    public WebElement findElement(By by)
    {
        return driver.findElement(by);
    }

    @Override
    public String getPageSource()
    {
        return driver.getPageSource();
    }

    @Override
    public void close()
    {
        driver.close();
    }

    @Override
    public void quit()
    {
        driver.quit();
        hasQuit = true;
    }

    @Override
    public Set<String> getWindowHandles()
    {
        return driver.getWindowHandles();
    }

    @Override
    public String getWindowHandle()
    {
        return driver.getWindowHandle();
    }

    @Override
    public TargetLocator switchTo()
    {
        return driver.switchTo();
    }

    @Override
    public Navigation navigate()
    {
        return driver.navigate();
    }

    @Override
    public Options manage()
    {
        return driver.manage();
    }

    public boolean hasQuit()
    {
        return hasQuit;
    }

    @Override
    public Object executeScript(String script, Object... args)
    {
        return ((JavascriptExecutor) driver).executeScript(script, args);
    }

    @Override
    public Object executeAsyncScript(String script, Object... args)
    {
        return ((JavascriptExecutor) driver).executeAsyncScript(script, args);
    }
}

自定义WebDriver需要实现交互式界面。 操作类调用perform()在自己的perform()方法这个接口的方法。

您可能还需要实现HasInputDevices接口。

您也可以扩展现有的RemoteWebDriver并对其进行自定义。 避免重复方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM