2017-01-16 4 views
1

Есть ли способ имитировать перетаскивание с помощью htmlunit-driver?htmlunit-driver - как имитировать перетаскивание?

При использовании Actions он бросает UnsupportedException

Внутри класса HtmlUnitMouse:

@Override 
    public void mouseMove(Coordinates where, long xOffset, long yOffset) { 
    throw new UnsupportedOperationException("Moving to arbitrary X,Y coordinates not supported."); 
    } 

Мои попытки за попытку сделать это:

первая попытка

(new Actions(driver)).dragAndDropBy(sliderHandle, 50, 0) 
        .build() 
        .perform(); 

вторая попытка

(new Actions(driver)).moveToElement(sliderHandle) 
        .clickAndHold() 
        .moveToElement(sliderHandle, 50, 0) 
        .release() 
        .build() 
        .perform(); 

Есть обходной путь для этого?

ответ

1

HtmlUnit - это GUI-Less браузер для Java-программ, который может многое сделать для нас, но не для всех. И, как вы заметили, это не имеет никакой поддержки для таких операций, как перетаскивание

new UnsupportedOperationException("Moving to arbitrary X,Y coordinates not supported."); 

В отличие от других водителей Селена, как , в котором один ваш пример должен работать нормально.

Однако, если вам все еще нужно работать с безгласным веб-тестированием, есть опция с PhantomJS. Да, он ориентирован на тестирование JS, но есть отличный проект под названием Ghost Driver (реализация протокола Webdriver Wire в простой JS для PhantomJS), который позволяет привязки Java вместе с Selenium API.

шаги, чтобы использовать его очень просто:

  1. Install PhantomJS in your OS и добавьте исполняемый файл в переменную PATH окр правильно.
  2. Добавить зависимость Maven для вашего pom.xml (наряду с Selenium LIBS: selenium-java и selenium-support):

    <dependency> 
        <groupId>com.github.detro</groupId> 
        <artifactId>phantomjsdriver</artifactId> 
        <version>1.2.0</version> 
    </dependency> 
    
  3. и адаптировать свой код, чтобы использовать его:

    // Set this property, in order to specify path that PhantomJS executable will use 
    System.setProperty("phantomjs.binary.path", System.getenv("PHANTOM_JS") + "/bin/phantomjs.exe"); 
    
    // New PhantomJS driver from ghostdriver 
    WebDriver driver = new PhantomJSDriver(); 
    driver.get("https://jqueryui.com/resources/demos/draggable/default.html"); 
    
    // Find draggable element 
    WebElement draggable = driver.findElement(By.id("draggable")); 
    
    System.out.println("x: " + draggable.getLocation().x 
         + ", y: " + draggable.getLocation().y); 
    
    // Perform drag and drop 
    (new Actions(driver)).dragAndDropBy(draggable, 50, 0) 
        .build() 
        .perform(); 
    
    System.out.println("x: " + draggable.getLocation().x 
         + ", y: " + draggable.getLocation().y); 
    

Конечный результат:

x: 8, y: 8 
x: 58, y: 8 
+0

Я переключил свой тест, чтобы теперь использовать PhantomJSDriver. Единственным недостатком использования PhantomJSDriver является то, что для установки PhantomJS на компьютер, на котором выполняются тесты, требуется HtmlUnit. –

+0

Да, это связь, которую вы должны иметь для этого. Но, как я уже сказал, HtmlUnit - это не серебряная пуля, она имеет ограничения, основанные на разных подходах. Я бы посоветовал вам взглянуть на это: [Каковы ограничения проверки браузером Headless (HtmlUnitDriver) в селене?] (Http: //sqa.stackexchange.com/questions/17233/what-are-the-limits-of-headlesshtmlunitdriver-browser-testing-in-selenium) и [Selenium vs HtmlUnit?] (http://stackoverflow.com/questions/12807689/selenium-vs- htmlunit) – bosco

+0

Благодарим вас за эту информацию. В настоящее время я обнаружил проблему требований phantomjs, используя профили и категории для тестов. (и добавление шага сборки с профилем для phantomjs на сервере сборки.) –

Смежные вопросы