Как выполнить перетаскивание с помощью объекта страницы?

Мне нужно выполнить действие перетаскивания для сценария. Как я могу добиться этого с помощью Page-Object.

Мне нужно щелкнуть элемент (например, кнопку из параметров) и поместить его в текстовую область. У меня есть поиск решения, но я не могу найти. Пожалуйста, помогите решить эту проблему. Спасибо


person KAK    schedule 29.07.2014    source источник
comment
В настоящее время гем объекта страницы не имеет метода перетаскивания. В списке задач проекта есть запрос функции. На данный момент вам нужно перейти к базовому элементу Selenium (или Watir).   -  person Justin Ko    schedule 29.07.2014


Ответы (4)


Есть более простые случаи для Watir:
drag_and_drop_by — перетащите этот элемент по заданным смещениям.

browser.div(:id => "draggable").drag_and_drop_by 100, -200

drag_and_drop_on — перетащите этот элемент на другой экземпляр элемента.

a = browser.div(:id => "draggable")
b = browser.div(:id => "droppable")
a.drag_and_drop_on b

Источник: http://rubydoc.info/gems/watir-webdriver/Watir/Element#drag_and_drop_by-instance_method

person Andrew Petrenko    schedule 15.08.2014

Использование Selenium WebDriver:

WebElement element = driver.findElement(By.name("source"));
WebElement target = driver.findElement(By.name("target"));

(new Actions(driver)).dragAndDrop(element, target).perform();

Использование watir-webdriver (работает только в FF(?)):

browser.div(:text=>"from_div").wd.drag_and_drop_on(browser.div(:text=>"to_div").wd)

Использование перетаскивания HTML5 Selenium WebDriver для Ruby

1) перетащите_and_drop_helper.js(https://gist.github.com/2362544) в свой тест/помощники каталог

2) Создайте новый метод:

def drag_and_drop(source,target)

   js_filepath=File.dirname(__FILE__)+"/drag_and_drop_helper.js"
   js_file= File.new(js_filepath,"r")
   java_script=""

  while (line=js_file.gets)
    java_script+=line
   end

   js_file.close

   @driver.execute_script(java_script+"$('#{source}').simulateDragDrop({ dropTarget: '#{target}'});")

   rescue Exception => e
     puts "ERROR :" + e.to_s

end

надеюсь, это поможет

person balintpekker    schedule 29.07.2014

Перетаскивание PageObject для Ruby

Ниже приведен пример «перетаскивания» с использованием PageObject с Cucumber, Ruby, PageObject Selenium WebDriver framework с использованием jqueryui.com /droppable/ страница:

#
# Feature file with Gherkin scenario
# 
Feature: Drag and Drop test

Scenario: Perform drag-and-drop test 
    Given I am on drag and drop test page
    When I switch to frame with demo-frame class
    And I drag left element and drop it on right element

#
# Step definitions file
# 
Given("I am on drag and drop test page") do
  visit(HomePage)
end

When("I switch to frame with demo-frame class") do
  on(HomePage) do |page|
    # call switch_to.frame only in one step definition, 
    # as it will give an error when try to call it in the next step definition
    page.browser.switch_to.frame page.browser.find_element(:class, 'demo-frame')
  end
end

And("I drag left element and drop it on right element") do
  on(HomePage) do |page|
    from_el = page.get_from_element
    to_el = page.get_to_element

    # elements has to be assigned directly from Selenium WebDriver, 
    # if assigned from the PageObject next line will give an error
    page.browser.action.click_and_hold(from_el).perform
    page.browser.action.move_to(to_el).perform
    page.browser.action.release.perform

    sleep 10 # just to see the drag and drop result
  end
end

#
# Page file
# 
class HomePage
  include PageObject

  page_url "https://jqueryui.com/droppable/"

  def get_from_element
    self.browser.find_element(:id, "draggable")
  end

  def get_to_element
    self.browser.find_element(:id, "droppable")
  end
end
person dumbledore    schedule 24.07.2019

Начиная с комментария Джастина о том, что это еще не реализовано, вы можете исправить гем Page-object в файле:

module PageObject
  module Elements
    class Element
      def drag_and_drop_on(other)
        element.drag_and_drop_on other.element
      end
    end    
  end
end

Это, по крайней мере, выполнит метод drag_and_drop_on в геме watir-webdriver без предупреждения об устаревании.

person Jared Darling    schedule 30.07.2014