2013-09-04 4 views
6

के लिए बाल तत्वों की सूची मैंने चारों ओर खोज की है और मुझे ऐसा करने का कोई तरीका नहीं मिल रहा है।एक Capybara/Poltergeist तत्व

हम एम्बरजेएस/रेल ऐप पर ककड़ी सुविधाओं में पोल्टरगेस्ट ड्राइवर के साथ कैपिबरा परीक्षण चला रहे हैं। मैं page.driver.debug का उपयोग नहीं कर सकता क्योंकि मैं एक हेडलेस वारंटी उदाहरण के अंदर दौड़ रहा हूं, ताकि समस्या निवारण मेरे लिए उपलब्ध न हो, लेकिन स्क्रीनशॉट काम करते हैं, और प्रश्न में पृष्ठ पर एक क्रोम देव उपकरण का निरीक्षण सही तत्व दिखाता है।

मेरे पास एक ककड़ी परिदृश्य है जो असफल रहा है, और ऐसा इसलिए है क्योंकि खोज काम नहीं कर रहा है। मेरा परीक्षण इस तरह दिखता है:

When(/^I delete description "(.*?)"$/) do |description| 
    within :css, '#myform' do 
    first('label', :text => /#{description}/).find(:xpath, '..').find(:css, 'button.delete') 
    end 
end 

यह प्रश्न में तत्व नहीं ढूंढ सकता है। यहाँ डोम के प्रासंगिक अनुभाग है:

<form id="myform"> 
    <div class="row-fluid question"> 
     <div class="span12"> 
     <div class="padding"> 
      <div id="ember576" class="ember-view is-viewing-edit-controls"> 
      <button class="delete" data-ember-action="31"></button> 
      <button class="edit" data-ember-action="32"></button> 
      <button class="insert_above" data-ember-action="33"></button> 
      <button class="insert_below" data-ember-action="34"></button> 
      <button class="move_up" data-ember-action="35"></button> 
      <button class="move_down" data-ember-action="36"></button> 
      <label class="question" data-ember-action="37">Enter your first name</label> 
      <input id="ember577" class="ember-view ember-text-field"> 
      <span class="error"></span> 
      </div> 
     </div> 
    </div> 
    </div> 
</form> 

अगर मैं एक binding.pry में जोड़ने के लिए, इस:

=> #<Capybara::Element tag="div"> 

और यह:

first('label', :text => /#{description}/).find(:xpath, '..') 
                           │ 

मुझे इस प्रतिक्रिया देता है

first('label', :text => /#{description}/).find(:xpath, '..') 
                           │ 

मुझे यह प्रतिक्रिया देता है:

=> "Enter your first name" 

लेकिन पूर्ण खोज:

first('label', :text => /#{description}/).find(:xpath, '..').find(:css, 'button.delete') 

मुझे इस प्रतिक्रिया देता है:

Capybara::ElementNotFound: Unable to find css "button.delete" 

मुझे लगता है कि यह एक माता पिता/भाई मुद्दा है है, लेकिन मैं समस्याओं का निवारण नहीं कर सकते यह। तो मुझे लगता है कि मेरे पास कुछ प्रश्न हैं:

  1. डीबगिंग के लिए, क्या पोलटरजिस्ट ड्राइवर के साथ सभी बाल तत्वों को सूचीबद्ध करने के लिए वैसे भी है?
  2. क्या मेरे xpath चयनकर्ता के साथ कुछ गड़बड़ है? तथ्य यह है कि ..Capybara::Element tag="div" लौट रहा है मुझे लगता है कि मेरे पास सही मूल तत्व है (और जैसा कि मैंने कहा है, यह अन्य समान परीक्षणों में अन्य पृष्ठों पर काम करता है), लेकिन मेरे पास यह सत्यापित करने का कोई तरीका नहीं है कि यह कौन सा तत्व है। मुझे नहीं पता कि xpath या कुछ और कैसे प्राप्त करें जो मुझे तत्व की पहचान करने में मदद करता है।

उत्तर

2

मुझे यह पता चला। परीक्षण ठीक काम कर रहा था, लेकिन मुझे अपने परिदृश्य में एक कार्रवाई कदम याद आ रहा था।

हालांकि, मैंने सोचा कि आपको यह जानना उपयोगी हो सकता है कि मैं सामग्री कैसे प्राप्त कर रहा हूं: पृष्ठ पर jQuery को निष्पादित करना। मैं अपने परीक्षण करने के लिए एक binding.pry जोड़ा, और फिर binding.pry मैं कंसोल में एक jQuery परिणाम लॉग इन, जैसे:

# this gave me the expected contents and verified that button.delete was a child 
page.execute_script("console.log($('#myform label.question').parent().html())"); 

# and this gave me the classes to demonstrate that it was the correct div 
page.execute_script("console.log($('#myform label.question').parent().attr('class'))"); 

मैं चयनकर्ताओं के साथ एक शॉर्टकट लिया क्योंकि मैं जानता था कि लेबल मैं खोज रहा था पहला था, लेकिन चयनकर्ता कोई फर्क नहीं पड़ता, यह console.log() - jQuery में binding.pry में आईजीजी का विचार है जो उपयोगी था।

0

कुछ जो अभी भी देख रहे हैं उनके लिए प्रयास करने के लिए कुछ: find(:xpath, '..') के बजाय first(:xpath, './/..') का उपयोग करने का प्रयास करें।

within('#myform') do 
    find('label', text: "#{description}", match: :first). 
    first(:xpath, './/..'). 
    find('button.delete'). 
    click 
end 
:

इसके अलावा यह एक अच्छा विचार बेहतर प्रदर्शन और रोकने अस्पष्ट मिलान के लिए, जब आप कर सकते हैं, प्रपत्र की आईडी गुण संभालने स्थिर है find के दायरे को कम करना है

संबंधित मुद्दे