Пользовательский WebDriver не может взаимодействовать с методами действий Selenium - PullRequest
0 голосов
/ 06 мая 2018

Мне пришлось использовать класс Selenium Actions, чтобы использовать метод doubleclick для взаимодействия с некоторыми элементами на моей странице. Это работало нормально с WebDriver (driver = DriverFactory.open(browserType);), но когда я конвертировал его в свой собственный WebDriver ниже, двойной щелчок не выполнялся.

Когда я работал в режиме отладки, я мог видеть, что с пользовательским драйвером вызывался метод doubleclick, но мышь оценивалась как ноль.

Кто-нибудь знает, почему мой пользовательский драйвер не работает с 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);
    }
}

1 Ответ

0 голосов
/ 06 мая 2018

Пользовательский WebDriver должен реализовывать интерфейс Interactive . Класс Actions вызывает метод perform() этого интерфейса в своем собственном методе execute ().

Возможно, вам также потребуется реализовать интерфейс HasInputDevices .

Вы также можете расширить существующий RemoteWebDriver и настроить его. Избавляет от дублирующих методов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...