Как найти строку, которая содержит конкретную строку в GEB и в этой конкретной строке мне нужно выбрать ссылку / флажок

0

Есть ли способ найти номер строки/индекс, который содержит определенную строку в GEB? Я могу проверить, содержит ли строка определенную строку или нет:

text: contains()

Но как я могу найти индекс этой строки, а затем нажать ссылку в той же строке, используя этот идентификатор индекса? Любое предложение или помощь будут действительно оценены. Пожалуйста, не говорите, что я пробовал до сих пор. Я провел несколько часов и все равно никак!

EDIT: Хорошо, поэтому проблема была: я могу выбрать любую строку с известным индексом, например:

$('p', 1).click() 

но когда я не знаю индекс строки и в этой конкретной строке, мне нужно выбрать ссылку/флажок, я считаю, что так мы хотим справиться с проблемой, не так ли? Или есть другой лучший способ сделать это?

  • 2
    Как кто-то может угадать, что вы пытались до сих пор? :)
  • 0
    Я отредактировал свой вопрос, спасибо!
Теги:
groovy
gradle
geb

2 ответа

2
Лучший ответ

Должен ли вы найти ссылку по строке? Если он находится в той же строке, почему бы не найти строку, contains как было предложено, затем обратитесь к ее родительскому объекту, а затем вернитесь, чтобы найти ссылку?

например $('p', contains('some text')).parent().find( ссылка ).click();

Если это не сработает, не могли бы вы объяснить, почему вам нужно получить доступ к нему в таком поместье?

  • 0
    Спасибо @ Габриэль. Я проверю и вернусь к вам, похоже, что должно работать!
  • 0
    Сработало нормально, Габриэль. Большое спасибо за рекурсивный способ решения проблемы. Итак, проблема была в следующем: я могу выбрать любую строку с известным индексом, например: $ ('p', 1) .click (), но когда я не знаю индекс строки и в этой конкретной строке, мне нужно чтобы выбрать ссылку / флажок, я считаю, что именно так мы хотим решить проблему, не так ли? Или есть другой лучший способ сделать это?
Показать ещё 2 комментария
2

Лучший способ обработки повторяющегося контента (таблицы/результаты поиска /etc...) в Geb - с помощью модуля. Пример из книги Геба:

class CartRow extends Module {
    static content = {
        cell { $("td", it) }
        productName { cell(0).text() }
        quantity { cell(1).text().toInteger() }
        price { cell(2).text().toDouble() }
    }
}

И определите список CartRows на нашей странице:

class CheckoutPage extends Page {
    static content = {
        cartItems { moduleList CartRow, $("table tr").tail() } // tailing to skip the header row
    }
}

Поскольку возвращаемое значение cartItems представляет собой список экземпляров CartRow, мы можем использовать любой из обычных методов сбора:

assert cartItems.every { it.price > 0.0 }

У меня также есть рабочий пример этого в моем проекте Geb Examples на GitHub...

  • 0
    Извини, Брайан. Это не было связано с повторяющимся содержанием. На самом деле, это было уникально, я имею в виду обратное. Спасибо за предложения, хотя :)
  • 1
    Это на самом деле связано с повторяющимся содержанием. Вы используете стол, нет? Используя модуль, вы можете получить всю строку в виде объекта. Таким образом, вы можете отказаться от .find или даже от индексов, которые могут быть нестабильными, и обрабатывать любой объем данных. Я знаю, что это сложно понять, во-первых, но это лучший способ обработки данных таблицы / строки. Удачи!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню