Как да извършите плъзгане и пускане с помощта на страница-обект?

Трябва да извърша действие с плъзгане и пускане за сценарий. Как мога да постигна това с помощта на 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 Drag and Drop Selenium WebDriver за Ruby

1) drag_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 gem без предупреждение за оттегляне.

person Jared Darling    schedule 30.07.2014