自定义 Web 驱动程序无法与 Selenium 操作方法交互



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

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

有谁知道为什么我的自定义驱动程序不适用于操作?

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);
}
}

自定义 Web 驱动程序需要实现交互式接口。Actions 类在其自己的 perform(( 方法中调用此接口的perform()方法。

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

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

最新更新