Module: OmniAI::Tools::Browser::SelectorGenerator
- Extended by:
- BaseSelectors, ContextualSelectors
- Defined in:
- lib/omniai/tools/browser/selector_generator.rb,
lib/omniai/tools/browser/selector_generator/base_selectors.rb,
lib/omniai/tools/browser/selector_generator/contextual_selectors.rb
Overview
Generates stable CSS selectors for HTML elements
Defined Under Namespace
Modules: BaseSelectors, ContextualSelectors
Class Method Summary
collapse
aria_label_selector, maxlength_selector, name_selector, placeholder_selector
build_parent_selector, build_position_selector, element_has_significant_class?, find_label_for_element, find_significant_parent, find_similar_siblings, generate_contextual_selectors, generic_class?, label_based_selectors, most_specific_class, parent_class_selectors, parent_context_prefix, position_based_selectors, same_key_attributes?, significant_class?, stable_id?
Class Method Details
.amount_class_selector(base, element) ⇒ Object
59
60
61
|
# File 'lib/omniai/tools/browser/selector_generator.rb', line 59
def amount_class_selector(base, element)
element["class"]&.include?("wv-input--amount") ? "#{base}.wv-input--amount" : nil
end
|
.attribute_selectors(element, tag) ⇒ Object
63
64
65
|
# File 'lib/omniai/tools/browser/selector_generator.rb', line 63
def attribute_selectors(element, tag)
maxlength_selector(element, tag) + name_selector(element, tag)
end
|
.generate_by_type(element) ⇒ Object
22
23
24
25
26
27
28
29
|
# File 'lib/omniai/tools/browser/selector_generator.rb', line 22
def generate_by_type(element)
case element.name
when "input" then generate_input_selectors(element)
when "textarea" then generate_textarea_selectors(element)
when "select" then generate_select_selectors(element)
else []
end
end
|
35
36
37
38
39
40
41
42
|
# File 'lib/omniai/tools/browser/selector_generator.rb', line 35
def generate_input_selectors(element)
selectors = []
selectors.concat(placeholder_selector(element, "input"))
selectors.concat(aria_label_selector(element, "input"))
selectors.concat(type_selectors(element))
selectors.concat(attribute_selectors(element, "input"))
selectors
end
|
.generate_select_selectors(element) ⇒ Object
48
49
50
|
# File 'lib/omniai/tools/browser/selector_generator.rb', line 48
def generate_select_selectors(element)
name_selector(element, "select") + aria_label_selector(element, "select")
end
|
.generate_stable_selectors(element) ⇒ Object
13
14
15
16
17
18
19
20
|
# File 'lib/omniai/tools/browser/selector_generator.rb', line 13
def generate_stable_selectors(element)
return [] unless valid_element?(element)
selectors = []
selectors.concat(generate_by_type(element))
selectors.concat(generate_contextual_selectors(element))
selectors.compact.uniq
end
|
.generate_textarea_selectors(element) ⇒ Object
44
45
46
|
# File 'lib/omniai/tools/browser/selector_generator.rb', line 44
def generate_textarea_selectors(element)
placeholder_selector(element, "textarea") + name_selector(element, "textarea")
end
|
.type_selectors(element) ⇒ Object
52
53
54
55
56
57
|
# File 'lib/omniai/tools/browser/selector_generator.rb', line 52
def type_selectors(element)
return [] unless valid_attribute?(element["type"])
base = "input[type=\"#{element['type']}\"]"
[base, amount_class_selector(base, element)].compact
end
|
.valid_attribute?(attribute) ⇒ Boolean
67
68
69
|
# File 'lib/omniai/tools/browser/selector_generator.rb', line 67
def valid_attribute?(attribute)
attribute && attribute.strip.length.positive?
end
|
.valid_element?(element) ⇒ Boolean
31
32
33
|
# File 'lib/omniai/tools/browser/selector_generator.rb', line 31
def valid_element?(element)
element.respond_to?(:name) && element.respond_to?(:parent)
end
|