使用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
,而是别的,我不确定。
答案 0 :(得分:2)
看起来你让它变得比它需要的更复杂 - 你应该能够做到
answers[i].choose("the text of the radio button you want to select")
如果找不到值,您可以捕获异常并在那里输出警告。
注意:Capybara元素中的父元素不是该元素的HTML父元素 - 它是查找给定元素时调用finder的元素 - 所以在你的情况下它是.answers元件。如果您确实想要访问节点的实际HTML父元素,可以调用element.find(:xpath, '..')