Кнопка во вложенной таблице с динамическим идентификатором
Я пытаюсь нажать на кнопку в ячейке таблицы, которая имеет динамическое имя с префиксом button_keep
это уникальный путь, указанный firebug для ячейки таблицы.
#mergePatientsSelectedTable > tbody:nth-child(2) > tr:nth-child(1) > td:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1)
Я пытаюсь добраться, используя следующее, но он не находит кнопку.
b.table(:id => "mergePatientsSelectedTable").tbody{2}.tr{1}.td{2}.table{1}.tbody{1}.tr{1}.td{1}.button(:index => 0).button(:name => /button_keep/).click
Я пытался прошить клетки и использовать IRB, но он продолжает выдавать мне подтверждение, что не могу найти кнопку.
Какие-либо предложения. благодарю вас
1 ответ
Вам не нужно выписывать весь путь. Каждый метод / локатор смотрит на всех потомков, а не только на прямых потомков. Использование целых путей может сделать код довольно хрупким.
Так почему бы просто не найти кнопку на основе известных атрибутов:
b.table(:id => "mergePatientsSelectedTable").button(:name => /button_keep/).click
Но, чтобы объяснить, почему у вас возникли проблемы с вашим решением, делая tbody{2}
фактически возвращает первый элемент tbody (не второй). {2}
это блок, который игнорируется.
Например, рассмотрим HTML:
<div>hi</div>
<div>bye</div>
Вы можете увидеть, как возвращается первый div при использовании блока:
b.div{2}.text
#=> "hi"
Чтобы получить второй div, вы можете использовать указатель индекса или получить второй элемент коллекции:
b.div(:index => 1).text
#=> "bye"
b.divs[1].text
#=> "bye"
Так что, если вы действительно хотите пройти весь путь, вы могли бы сделать:
b.table(:id => "mergePatientsSelectedTable").tbody(:index => 1).tr.td(:index => 1).table.tbody.tr.td.button(:name => /button_keep/).click
Обратите внимание, что:
nth-child
основывается на индексе 1, в то время как Watir использует индекс на основе 0.- Если вы хотите первое совпадение, вам не нужно включать индекс -
:index => 0
предполагается.