簡體   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