访问外部 table 的 tr 标签内的两个 tables,后者又包含 tables 和其他元素,如 select 列表、文本区域
Access two tables inside tr tag of an outer table, which in turn contains tables and other elements like select list, text area
我的需要是识别 table 并检查每个 select 列表的值以获取特定问题名称及其相应的注释值。
在这里,我发现问题本身被分成了两个 table,我在访问它们时遇到了困难。
我的 HTML 结构如下所示。
<table class="dataentry">
<tbody>
<tr>
<td width="50%">
<table class="genetichxtable entirewidth">
<tbody>
<tr>
<th></th>
<th>Y/N</th>
<th>Notes</th>
</tr>
<tr>
<td>Huntington's Chorea</td>
<td class="nowrap">
<select name="GSANS{1}{ANSWERYN}" questionid="1" section="GENETICHX" type="SELECT">
<option value=""></option>
<option value="Y">Yes</option>
<option value="N">No</option>
</select>
</td>
<td class="nowrap">
<textarea name="GSANS{1}{ANSWERNOTES}" type="TEXTAREA">
</textarea>
</td>
</tr>
<tr>
<td>History of Hepatitis</td>
<td class="nowrap">
<select name="GSANS{2}{ANSWERYN}" questionid="2" section="GENETICHX" type="SELECT">
<option value=""></option>
<option value="Y">Yes</option>
<option value="N">No</option>
</select>
</td>
<td class="nowrap"><textarea name="GSANS{2}{ANSWERNOTES}" type="TEXTAREA"></textarea>
</td>
</tr>
<tr>
<td>Intellectual Disability/Autism</td>
<td class="nowrap">
<select name="GSANS{5}{ANSWERYN}" questionid="5" section="GENETICHX" type="SELECT">
<option value=""></option>
<option value="Y">Yes</option>
<option value="N">No</option>
</select>
</td>
<td class="nowrap"><textarea name="GSANS{5}{ANSWERNOTES}" type="TEXTAREA"></textarea>
</td>
</tr>
</tbody>
</table>
</td>
<td width="50%">
<table class="genetichxtable entirewidth">
<tbody>
<tr>
<th></th>
<th>Y/N</th>
<th>Notes</th>
</tr>
<tr>
<td>Thalassemia (Italian, Greek, Mediterranean, Or Asian Background): MCV < 80</td>
<td class="nowrap">
<select name="GSANS{4}{ANSWERYN}" questionid="4" section="GENETICHX" type="SELECT">
<option value=""></option>
<option value="Y">Yes</option>
<option value="N">No</option>
</select>
</td>
<td class="nowrap"><textarea name="GSANS{4}{ANSWERNOTES}" type="TEXTAREA"></textarea>
</td>
</tr>
<tr>
<td>Congenital Heart Defect</td>
<td class="nowrap">
<select name="GSANS{3}{ANSWERYN}" questionid="3" section="GENETICHX" type="SELECT">
<option value=""></option>
<option value="Y">Yes</option>
<option value="N">No</option>
</select>
</td>
<td class="nowrap"><textarea name="GSANS{3}{ANSWERNOTES}" type="TEXTAREA"></textarea>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
我想从下拉列表中迭代 select_list 的 table 到 select 值并输入 notes.Is 有什么方法可以使用 WATIR 自动执行此操作?
每个问题都封装在一行 - tr
元素中。但是,有些行不是行 - 例如包含 2 个 child 表的 tr
和包含列 headers 的 tr
。问题行的不同之处在于包含一个 select 列表(即一个问题)。
您可以通过查找带有 select 个列表的内部行来找到问题行:
outer_tr = browser.table(class: 'dataentry').tr
questions = outer_tr.trs.select { |tr| tr.select.exists? }
虽然较少 Watir-like,但可以使用 XPath 更简洁地编写:
questions = browser.trs(xpath: '//table[@class="dataentry"]//tr[./td/select]')
无论您使用上述哪种方法,现在每个问题行都在 collection 中。这允许您遍历每一行并找到标题、select 列表和相同问题的注释字段。以下遍历每个问题:
questions.each do |tr|
# The data/fields of interest for the row
title = tr.td.text
select = tr.select
notes = tr.textarea
# Do stuff with the fields
p title
select.select('Yes')
notes.set('some note')
end
如果你想设置一个特定的问题,我假设是标题,你可以使用 find
方法遍历这些问题。这将 return 与问题相关的特定行。例如,下面找到与 "History of Hepatitis" 相关的问题。您可以看到问题的 select/textarea 是正确的相关字段(即问题 2)。
question = questions.find { |q| q.td.text == 'History of Hepatitis' }
p question.td.text
#=> "History of Hepatitis"
p question.select.name
#=> "GSANS{2}{ANSWERYN}"
p question.textarea.name
#=> "GSANS{2}{ANSWERNOTES}"
请注意,如果您使用的是 page-object gem,则嵌套元素方法名称会有所不同。下面显示了遍历 page-object 语法中的每个问题:
outer_tr = table_element(class: 'dataentry').row_element
questions = outer_tr.row_elements.select { |tr| tr.select_list_element.exists? }
questions.each do |question|
# The data/fields of interest for the row
title = question.cell_element.text
select = question.select_list_element
notes = question.text_area_element
# Do stuff with the fields
p title
select.select('Yes')
notes.value = 'some note'
end
我的需要是识别 table 并检查每个 select 列表的值以获取特定问题名称及其相应的注释值。
在这里,我发现问题本身被分成了两个 table,我在访问它们时遇到了困难。
我的 HTML 结构如下所示。
<table class="dataentry">
<tbody>
<tr>
<td width="50%">
<table class="genetichxtable entirewidth">
<tbody>
<tr>
<th></th>
<th>Y/N</th>
<th>Notes</th>
</tr>
<tr>
<td>Huntington's Chorea</td>
<td class="nowrap">
<select name="GSANS{1}{ANSWERYN}" questionid="1" section="GENETICHX" type="SELECT">
<option value=""></option>
<option value="Y">Yes</option>
<option value="N">No</option>
</select>
</td>
<td class="nowrap">
<textarea name="GSANS{1}{ANSWERNOTES}" type="TEXTAREA">
</textarea>
</td>
</tr>
<tr>
<td>History of Hepatitis</td>
<td class="nowrap">
<select name="GSANS{2}{ANSWERYN}" questionid="2" section="GENETICHX" type="SELECT">
<option value=""></option>
<option value="Y">Yes</option>
<option value="N">No</option>
</select>
</td>
<td class="nowrap"><textarea name="GSANS{2}{ANSWERNOTES}" type="TEXTAREA"></textarea>
</td>
</tr>
<tr>
<td>Intellectual Disability/Autism</td>
<td class="nowrap">
<select name="GSANS{5}{ANSWERYN}" questionid="5" section="GENETICHX" type="SELECT">
<option value=""></option>
<option value="Y">Yes</option>
<option value="N">No</option>
</select>
</td>
<td class="nowrap"><textarea name="GSANS{5}{ANSWERNOTES}" type="TEXTAREA"></textarea>
</td>
</tr>
</tbody>
</table>
</td>
<td width="50%">
<table class="genetichxtable entirewidth">
<tbody>
<tr>
<th></th>
<th>Y/N</th>
<th>Notes</th>
</tr>
<tr>
<td>Thalassemia (Italian, Greek, Mediterranean, Or Asian Background): MCV < 80</td>
<td class="nowrap">
<select name="GSANS{4}{ANSWERYN}" questionid="4" section="GENETICHX" type="SELECT">
<option value=""></option>
<option value="Y">Yes</option>
<option value="N">No</option>
</select>
</td>
<td class="nowrap"><textarea name="GSANS{4}{ANSWERNOTES}" type="TEXTAREA"></textarea>
</td>
</tr>
<tr>
<td>Congenital Heart Defect</td>
<td class="nowrap">
<select name="GSANS{3}{ANSWERYN}" questionid="3" section="GENETICHX" type="SELECT">
<option value=""></option>
<option value="Y">Yes</option>
<option value="N">No</option>
</select>
</td>
<td class="nowrap"><textarea name="GSANS{3}{ANSWERNOTES}" type="TEXTAREA"></textarea>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
我想从下拉列表中迭代 select_list 的 table 到 select 值并输入 notes.Is 有什么方法可以使用 WATIR 自动执行此操作?
每个问题都封装在一行 - tr
元素中。但是,有些行不是行 - 例如包含 2 个 child 表的 tr
和包含列 headers 的 tr
。问题行的不同之处在于包含一个 select 列表(即一个问题)。
您可以通过查找带有 select 个列表的内部行来找到问题行:
outer_tr = browser.table(class: 'dataentry').tr
questions = outer_tr.trs.select { |tr| tr.select.exists? }
虽然较少 Watir-like,但可以使用 XPath 更简洁地编写:
questions = browser.trs(xpath: '//table[@class="dataentry"]//tr[./td/select]')
无论您使用上述哪种方法,现在每个问题行都在 collection 中。这允许您遍历每一行并找到标题、select 列表和相同问题的注释字段。以下遍历每个问题:
questions.each do |tr|
# The data/fields of interest for the row
title = tr.td.text
select = tr.select
notes = tr.textarea
# Do stuff with the fields
p title
select.select('Yes')
notes.set('some note')
end
如果你想设置一个特定的问题,我假设是标题,你可以使用 find
方法遍历这些问题。这将 return 与问题相关的特定行。例如,下面找到与 "History of Hepatitis" 相关的问题。您可以看到问题的 select/textarea 是正确的相关字段(即问题 2)。
question = questions.find { |q| q.td.text == 'History of Hepatitis' }
p question.td.text
#=> "History of Hepatitis"
p question.select.name
#=> "GSANS{2}{ANSWERYN}"
p question.textarea.name
#=> "GSANS{2}{ANSWERNOTES}"
请注意,如果您使用的是 page-object gem,则嵌套元素方法名称会有所不同。下面显示了遍历 page-object 语法中的每个问题:
outer_tr = table_element(class: 'dataentry').row_element
questions = outer_tr.row_elements.select { |tr| tr.select_list_element.exists? }
questions.each do |question|
# The data/fields of interest for the row
title = question.cell_element.text
select = question.select_list_element
notes = question.text_area_element
# Do stuff with the fields
p title
select.select('Yes')
notes.value = 'some note'
end