Динамический выбор типов элементов с помощью Watir - PullRequest
0 голосов
/ 13 октября 2019

В watir у нас есть возможность находить элементы по тексту, например browser.div(text:'some text').

В моем проекте есть много общих элементов, таких как выпадающее меню, которое содержит div с текстом и классом "items". ,В этом случае я мог бы сделать browser.div(text:'some text', class: 'items'), если бы я хотел более общий способ доступа к этим элементам.

У меня есть то же самое с другими элементами HTML, такими как ссылки, пролеты, кнопки и т. Д. Есть случаи, когда то же самоеТекст находится в нескольких местах, но просто разные типы элементов. В любом случае я мог бы сделать метод, где я передаю тип элемента и по-прежнему найти по тексту?

Что-то вроде

def get_element_by_text(tag, text)
browser.tag(text:'some text')
end

Ответы [ 2 ]

1 голос
/ 15 октября 2019

В дополнение к ответу Раджагопалана, если вы также хотите провести различие между поиском массива элементов или одного элемента, вы всегда можете использовать функцию send() Руби: https://apidock.com/ruby/Object/send

tag = 'input'
browser.send(tag, text: 'some text')
# browser.input(text: 'some text')
tag = 'inputs'
browser.send(tag, text: 'some text')
# browser.inputs(text: 'some text')

Так что вВаш случай:

def get_element_by_text(tag, text)
  browser.send(tag, text: text)
end

Или сделать его еще более динамичным

def get_element(tag, *args)
  browser.send(tag, args)
end

Примечание: Лично я против такого рода единоличной функции к правилувсе виды поведения. Стандартный Watir находится в хорошем балансе кода. Делая это, прежде чем вы это знаете, вы переписываете watir.

1 голос
/ 13 октября 2019

Да, вы можете написать следующий метод

browser.element(tag_name: tag,text:'some text')

В моем коде выше tag - это переменная, которая получит любое имя тега через ваш формальный аргумент метода.

...