
org.openqa.selenium.sikulix.SikulixDriver Maven / Gradle / Ivy
/*
*
*/
package org.openqa.selenium.sikulix;
import com.automationrockstars.design.desktop.driver.ByImage;
import com.automationrockstars.design.desktop.driver.internal.ImageCache;
import com.automationrockstars.design.desktop.driver.internal.SikuliDriver;
import com.automationrockstars.design.desktop.driver.internal.SikuliKeyboard;
import com.automationrockstars.design.desktop.driver.internal.SikuliMouse;
import com.google.common.base.Preconditions;
import com.google.common.collect.Sets;
import org.openqa.selenium.*;
import org.openqa.selenium.By.ById;
import org.openqa.selenium.interactions.HasInputDevices;
import org.openqa.selenium.interactions.Keyboard;
import org.openqa.selenium.interactions.Mouse;
import org.openqa.selenium.internal.FindsById;
import org.openqa.selenium.logging.Logs;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.sikuli.script.Screen;
import javax.imageio.ImageIO;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.Set;
public class SikulixDriver implements WebDriver, TakesScreenshot, HasCapabilities, HasInputDevices, FindsById {
private static final DesiredCapabilities base = new DesiredCapabilities("sikulix", "1.0.4", Platform.WINDOWS);
private final SikuliDriver driver;
private final DesiredCapabilities caps;
public SikulixDriver(Capabilities capabilities) {
this();
caps.merge(capabilities);
}
public SikulixDriver() {
caps = new DesiredCapabilities(capabilities());
this.driver = SikuliDriver.driver();
}
private static ByImage translate(By by) {
if (by instanceof ByImage) {
return (ByImage) by;
}
Preconditions.checkArgument(by instanceof ById, "Cannot translate locator");
String imagePath = by.toString().replaceAll("By.id: ", "");
return new ByImage(imagePath);
}
public static final Capabilities capabilities() {
base.setCapability("cannot_wrap", true);
return base;
}
@Override
public List findElements(By by) {
return translate(by).findElements(driver);
}
@Override
public WebElement findElement(By by) {
return translate(by).findElement(driver);
}
@Override
public void close() {
}
@Override
public void quit() {
}
@Override
public Set getWindowHandles() {
return Sets.newHashSet(getWindowHandle());
}
@Override
public String getWindowHandle() {
return "Desktop";
}
@Override
public Keyboard getKeyboard() {
return new SikuliKeyboard(Screen.all());
}
@Override
public Mouse getMouse() {
return new SikuliMouse(Screen.all());
}
@Override
public Capabilities getCapabilities() {
return capabilities();
}
@Override
public X getScreenshotAs(OutputType target) throws WebDriverException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
ImageIO.write(Screen.as(0).capture().getImage(), "png", baos);
byte[] bytes = baos.toByteArray();
baos.flush();
return target.convertFromPngBytes(bytes);
} catch (IOException e) {
throw new WebDriverException(e);
}
}
@Override
public WebElement findElementById(String using) {
return new ByImage(using).findElement(driver);
}
@Override
public List findElementsById(String using) {
return new ByImage(using).findElements(driver);
}
@Override
public Options manage() {
return new Options() {
@Override
public Window window() {
return null;
}
@Override
public Timeouts timeouts() {
return null;
}
@Override
public Logs logs() {
return null;
}
@Override
public ImeHandler ime() {
return null;
}
@Override
public Set getCookies() {
// TODO Auto-generated method stub
return null;
}
@Override
public Cookie getCookieNamed(String name) {
return null;
}
@Override
public void deleteCookieNamed(String name) {
ImageCache.remove(name);
}
@Override
public void deleteCookie(Cookie cookie) {
ImageCache.remove(cookie.getName());
}
@Override
public void deleteAllCookies() {
ImageCache.removeAll();
}
@Override
public void addCookie(Cookie cookie) {
String imageId = cookie.getName();
String imageContent = cookie.getValue();
ImageCache.add(imageId, imageContent);
}
};
}
@Override
public void get(String url) {
}
@Override
public String getCurrentUrl() {
return getTitle();
}
@Override
public String getTitle() {
return "Screen";
}
@Override
public String getPageSource() {
return "";
}
@Override
public TargetLocator switchTo() {
throw new UnsupportedOperationException("Navigation on desctop is not supproted");
}
@Override
public Navigation navigate() {
throw new UnsupportedOperationException("Navigation on desctop is not supproted");
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy