使用Capybara查找标签文本

时间:2016-03-09 20:47:02

标签: ruby selenium-webdriver capybara

使用Capybara查找标签文本

背景:我有一个KBA页面和一组问题和答案,答案是使用单选按钮的5个可能答案的形式。因此,我需要遍历每个单选按钮的每个标签,以匹配yaml文件中的有效答案。

HTML:

<div class="questions"></div>
<div class="answers"></div>
  <p>
    <label>
     <input id="answers_question_0_1" type="radio" checked="checked" value="1" name="answers[question_0]"></input>
     RADIO BUTTON TEXT 1
    </label>
  </p>
  <p></p> #another radio button and label text 2
  <p></p> #another radio button and label text 3
  <p></p> #another radio button and label text 4
  <p></p> #another radio button and label text 5

我的测试代码:

  def answer_questions

   .
   .
   . 

   i=0

   def answers
     page.all('.answers')
   end

   #This is accessing the answer value from the selected correct question from the kba.yml file
   valid_answers = this variable contains the valid answer to the question

   #********THIS IS THE PROBLEM BLOCK*****************************
   #Set the radio buttons if they match one of the answers
   @correct_answer = answers[i].all(:radio_button).find do |radio|
     valid_answers.include?(radio.parent.text)
   end
   #********THIS IS THE PROBLEM BLOCK*****************************      

   i +=1

   unless @correct_answer
     p "Unable to answer question: #{question_text}" and next
   end

   @correct_answer.select

  end

问题出在&#34;问题块&#34;在上面的代码片段中注明。我无法弄清楚如何获得每个单选按钮绑定到一个标签/ p标签的文本,而是返回所有单选按钮的文本并检查变量&#34; valid_answers&#34;那总是失败。

我基本上希望radio.button.text等于&#34; RADIO BUTTON TEXT 1&#34;对于它的相应单选按钮。但是radio.button.text返回:

RADIO BUTTON TEXT 1 RADION BUTTON TEXT 2 RADIO BUTTON TEXT 3等。

我猜它不应该是radio.parent.text,而是别的,我不确定。

1 个答案:

答案 0 :(得分:2)

看起来你让它变得比它需要的更复杂 - 你应该能够做到

answers[i].choose("the text of the radio button you want to select")

如果找不到值,您可以捕获异常并在那里输出警告。

注意:Capybara元素中的父元素不是该元素的HTML父元素 - 它是查找给定元素时调用finder的元素 - 所以在你的情况下它是.answers元件。如果您确实想要访问节点的实际HTML父元素,可以调用element.find(:xpath, '..')