2016-03-21 31 views
1

Bir web sayfasının Capybara'yı kullanarak, bir kağıdın belirli koordinatlarında bir tıklama, sürükleme ve bırakmaya çalışıyorum. Hedef, ajax yoluyla fare olaylarına cevap veren takvim içeren bir elementtir. Çizelgelere tıklama, sürükleme ve serbest bırakma yoluyla eklenir. yöntemiyle 1 ileCapibara ile belirli koordinatlara basmanız, basılı tutmanız ve hareket ettirmeniz gerekiyor (ruby)

Yöntem 1

cal = find(:xpath, "//div[@class='dhx_cal_container']") 
page.driver.browser.mouse.move_to(cal.native, 240, 250) 
page.driver.browser.mouse.down 
page.driver.browser.mouse.move_by(0, 150) 
page.driver.browser.mouse.up 

Sorun: Ben 2 yöntemler denedi hiçbir şey ekran göre gerçekleşiyor.

Yöntem yöntemiyle 2 ile 2

driver.browser.action.move_to(native).move_by(x1, y1).click_and_hold.perform 
driver.browser.action.move_to(native).move_by(x2, y2).release.perform 

Sorun: click_and_hold hep elemanın merkezini hedef alır.

Bu durumda tıklatmayı ve sürüklemeyi nasıl uygulayacağınız hakkında herhangi bir fikrin var mı? Sen Kapibara en drag_to yöntem kullanmalıdır

cevap

2

source = page.find('#foo') 
target = page.find('#bar') 
source.drag_to(target) 

diğer bilgiler: http://www.rubydoc.info/github/jnicklas/capybara/Capybara%2FNode%2FElement%3Adrag_to Eğer Capybara çapraz sürücü drag_to keşfettim gibi

+1

Sorun şu ki, bir öğeyi sürüklemek işe yaramıyor. Belirli bir noktada takvim öğesini tıklatmak ve fareyi birkaç piksel yukarı veya aşağı hareket ettirmek gerekir. –

0

başka ortasında üzerine bir elementin ortasını sürükler. Bu sizin ihtiyaçlarınızı karşılamadığı için, sürücüye özel olarak gitmeniz gerekir - durumunuzda selenyum belirtmişsinizdir. #click_and_hold sadece bir elemanın orta kısmına tıklarsanız onu değil bir öğeyi geçersiniz. Yönteminizin 1 önlemlerin alınmasında ve Yöntem 2 tarzı haline Eğer move_to geçirilen

cal = find(:xpath, "//div[@class='dhx_cal_container']") 
page.driver.browser.action.move_to(cal.native, 240, 250). 
          click_and_hold. 
          move_to(cal.native, 240, 400). 
          release. 
          perform 

uzaklıklar istediğini yapmalıdır aşağıdaki çeviri cal.native elemanın sol üst köşesinden vardır. UI'lerin davranışı sadece kabı sürüklemek ve diğer herhangi bir elemanın pozisyonuna dayanmayan bir miktar offset bırakmaktır. Kapsayıcıya göre yer seçmeyi gerçekten tercih ettiğinizden ve kapsayıcı içindeki öğelerin sürüklenmemesinden emin misiniz?

+0

Maalesef çalışmıyor. Orijinal sorular yöntem 2'de görebileceğiniz gibi, click_and_hold da öğenin merkezini hedefler. –

+0

Ve evet, fareyi öğenin içine sürüklemek gerekiyor, öğelerin konteynerin içinde hareket etmesi durum böyle değil. –

+0

@MiikaPalokangas selenyumdan - https://github.com/SeleniumHQ/selenium/blob/ab1e647d0fc8fc39e6b00ae94321ab228b6728f2/rb/lib/selenium/webdriver/common/action_builder.rb#L164 - click_and_hold yalnızca bir öğenin ortasına taşınmalıdır eğer bir tanesi geçerse (https://github.com/SeleniumHQ/selenium/blob/ab1e647d0fc8fc39e6b00ae94321ab228b6728f2/rb/lib/selenium/webdriver/common/mouse.rb#L49 adresinden Mouse # 'u çağırır ve yalnızca öğe geçerse hareket eder) - Geçirilen bir öğe olmadan sadece bir fare aşağı olmalıdır. Bu sizin için uygun değilse, bunu selenyum projesine bildirmek isteyebilirsiniz. –