2013-10-16 5 views
1

Sauul On Demand 인프라에서 Sikuli WebDriver 기반 테스트를 실행하려고했습니다. 그러나 RemoteWebDriver에 문제가 있습니다.RemoteWebDriver를 SikuliWebDriver에 캐스팅 할 수 없습니다.

나는이 BaseSikuliWebDriver 클래스를 가지고

package com.pitito.sikuli.base; 

import java.lang.reflect.Method; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.HashMap; 
import java.util.Map; 

import org.openqa.selenium.Platform; 
import org.openqa.selenium.remote.Augmenter; 
import org.openqa.selenium.remote.CapabilityType; 
import org.openqa.selenium.remote.DesiredCapabilities; 
import org.openqa.selenium.remote.RemoteWebDriver; 
import org.testng.ITestResult; 
import org.testng.annotations.AfterMethod; 
import org.testng.annotations.BeforeMethod; 

import com.pitito.core.basetests.BaseLoggingTest; 
import com.pitito.selenium.webdriver.RemoteWebDriverSession; 
import com.pitito.selenium.webdriver.WebDriverScreenshooter; 
import com.pitito.sikuli.webdriver.SikuliFirefoxDriver; 

/** 
* Base class for all Sikuli WebDriver tests. 
* 
* @author guillem.hernandez 
*/ 
public abstract class BaseSikuliWebDriverTest { 

    Map<String, Object> sauceJob = new HashMap<String, Object>(); 

    private static SikuliFirefoxDriver sikuliDriver; 

    protected SikuliFirefoxDriver driver() { 
    return getDriver(); 
    } 

    public static SikuliFirefoxDriver getDriver() { 
    return sikuliDriver; 
    } 

    public static void setDriver(SikuliFirefoxDriver driver) { 
    BaseSikuliWebDriverTest.sikuliDriver = driver; 
    } 

    @Override 
    @BeforeMethod(alwaysRun = true) 
    protected void setup(Method method, Object[] testArguments) { 
    super.setup(method, testArguments); 
    String sessionId = method.getName() + "_" + testArguments.hashCode(); 
    DesiredCapabilities caps = DesiredCapabilities.firefox(); 
    caps.setCapability("id", sessionId); 
    caps.setCapability("name", sessionId); 
    caps.setCapability(CapabilityType.BROWSER_NAME, "firefox"); 
    caps.setCapability("platform", Platform.XP); 
    caps.setCapability("version", "21"); 
    try { 
    sikuliDriver = (SikuliFirefoxDriver) new Augmenter().augment(new RemoteWebDriver(new URL("http://" 
      + RemoteWebDriverSession.USER + ":" + RemoteWebDriverSession.APIKEY 
      + "@ondemand.saucelabs.com:80/wd/hub"), caps)); 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } 
    setDriver(sikuliDriver); 
    } 

    @Override 
    @AfterMethod(alwaysRun = true) 
    protected void teardown(ITestResult tr, Method method) { 
    if ((logger() != null) && (tr.getStatus() == ITestResult.FAILURE)) { 
     logUnexpectedException(tr.getThrowable()); 
    } 
    super.teardown(tr, method); 
    sikuliDriver.quit(); 
    } 

    @Override 
    protected void logScreenshot(String screenshotName) { 
    logResource(new WebDriverScreenshooter(driver(), screenshotName).getScreenshot()); 
    } 
} 

내가 구현 된 테스트는 Sikuli WebDriver 예이며 코드는 다음과 같다 :

package com.pitito.sikuli.tests; 

import java.net.MalformedURLException; 
import java.net.URL; 

import org.openqa.selenium.By; 
import org.openqa.selenium.Keys; 
import org.openqa.selenium.WebElement; 
import org.testng.annotations.Test; 

import com.pitito.sikuli.base.BaseSikuliWebDriverTest; 
import com.pitito.sikuli.webdriver.ImageElement; 

/** 
* Sikuli Firefox WebDriver Automated Test Example. 
* 
* @author guillem.hernandez 
*/ 
public class SikuliGoogleCodeTest extends BaseSikuliWebDriverTest { 

    @Test(groups = { "ES" }, description = "Use Sikuli to search on Google Maps") 
    public void testSikuliWebDriverPassingExample_ES() { 
    verifySikuliWebDriverPassingTest(); 
    } 

    private void verifySikuliWebDriverPassingTest() { 
    // visit Google Map 
    driver().get("https://maps.google.com/"); 

    // enter "Denver, CO" as search terms 
    WebElement input = driver().findElement(By.id("gbqfq")); 
    input.sendKeys("Denver, CO"); 
    input.sendKeys(Keys.ENTER); 

    ImageElement image; 

    // find and click on the image of the lakewood area 
    try { 
     image = driver().findImageElement(new URL("https://dl.dropbox.com/u/5104407/lakewood.png")); 

     image.doubleClick(); 

     // find and click on the image of the kendrick lake area 
     image = 
      driver().findImageElement(new URL("https://dl.dropbox.com/u/5104407/kendrick_lake.png")); 
     image.doubleClick(); 

     // find and click the Satellite icon to switch to the satellite view 
     image = driver().findImageElement(new URL("https://dl.dropbox.com/u/5104407/satellite.png")); 
     image.click(); 

     // find and click the plus button to zoom in 
     image = driver().findImageElement(new URL("https://dl.dropbox.com/u/5104407/plus.png")); 
     image.click(); 

     // find and click the link button 
     WebElement linkButton = driver().findElement(By.id("link")); 
     linkButton.click(); 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } 
    } 
} 

내가 테스트를 실행하려고하면 오류 I을 얻을 수있다이 하나

:

[Invoker 18958118] Invoking @BeforeMethod BaseSikuliWebDriverTest.setup(java.lang.reflect.Method, [Ljava.lang.Object;)[pri:0, instance:[email protected]] 
Failed to invoke configuration method com.pitito.sikuli.base.BaseSikuliWebDriverTest.setup:org.openqa.selenium.remote.RemoteWebDriver$$EnhancerByCGLIB$$52a1cf6f cannot be cast to com.pitito.sikuli.webdriver.SikuliFirefoxDriver 

문제는 여기에있는

sikuliDriver = (SikuliFirefoxDriver) new Augmenter().augment(new RemoteWebDriver(new URL("http://" 
      + RemoteWebDriverSession.USER + ":" + RemoteWebDriverSession.APIKEY 
      + "@ondemand.saucelabs.com:80/wd/hub"), caps)); 

어떻게 SikuliFirefoxDriver를 원격으로 사용할 수 있습니까? SikuliFirefoxDriver로 RemoteWebDriver를 전송하려면 어떻게해야합니까? 할 수 있을까요?

답변

2

아는대로 Selulium Grid 서버는 Sikuli 명령을 전달할 수있는 기능이 없습니다 (및 JSON API를 통해 비교 목적의 바이너리 스크린 샷). SauceLabs조차도이 기능을 제공하지 않습니다. 바라건대, 언젠가는 레이더에 탑재되기를 바랍니다. SauceLabs 포럼에는이 질문을 한 사람이 있습니다 (그리고 나는이 답변에 대해서도 대답했습니다).

브라우저/Firefox 메뉴 및 기본 대화 상자를 자동화 할 수있는 것으로 생각되는 진행중인 프로젝트가 있다는 것을 알고 있습니다. Marionette.

0

내 생각에 SikuliFirefoxDriver는 RemoteWebdriver로 호출되지 않았기 때문에 추가 할 수 없습니다. 원하는 기능으로 sikuli를 사용하여 Remote webdriver로 호출 해보십시오. 작동한다면 여기에 게시하십시오. 가능한 경우 교정본을 찾을 수 없습니다.

1

필자는 sikuli 드라이버의 원격 드라이버 버전을 구현했습니다. 이를 사용하여이 작업을 수행 할 수 있습니다. 포크에 자유롭게 있으십시오 : https://github.com/AJ-72/SikuliRemoteWebdriver