Как в таком случае нажать первую ссылку:
<div class="item">
<a href="/agree/">Agree</a>
</div>
<div class="item">
<a href="/agree/">Agree</a>
</div>
within ".item" do
first(:link, "Agree").click
end
и я получаю эту ошибку:
Capybara::Ambiguous:
Ambiguous match, found 2 elements matching css ".item"
И без этого within
я получаю эту ошибку:
Failure/Error: first(:link, "Agree").click
NoMethodError:
undefined method `click' for nil:NilClass
Попробуйте следующее:
Источники:
источник
Эта формулировка также работает:
источник
Xpath может обращаться к элементу. Я пока не очень хорошо разбираюсь в этом, но что-то вроде
//div[@class='active'][1]/a
Это может работать, а может и не работать, но дело в том, что xpath может адресовать массив совпадений и извлекать конкретный. Вы должны соответствовать этому.
Рабочий пример из одного из моих проектов:
источник
Поскольку first () не всегда ждет, возможно, это полезно:
источник
большинство этих решений не будут использовать блестящие функции ожидания Capybara
лучше сделать так, как предлагает эта ссылка:
https://oughttbot.com/blog/write-reliable-asynchronous-integration-tests-with-capybara#find-the-first-matching-element
Плохой:
first(".active").click
Если на странице еще нет элемента .active, сначала будет возвращено nil, и щелчок не удастся.
Хорошо:
Если вы хотите убедиться, что есть только один
find(".active").click
Если вам нужен только первый элемент,
find(".active", match: :first).click
Capybara будет ждать появления элемента, прежде чем пытаться щелкнуть.
Обратите внимание, что
match: :first
он более хрупкий, потому что он незаметно щелкнет другой элемент, если вы введете новые элементы, которые соответствуют.источник
Просто вы можете использовать:
источник