Class: Gridium::ElementVerification

Inherits:
Object
  • Object
show all
Defined in:
lib/element_verification.rb

Instance Method Summary collapse

Constructor Details

#initialize(element, timeout, fail_test: false, element_should_exist: true) ⇒ ElementVerification

Returns a new instance of ElementVerification.

Parameters:

  • element (Element)
  • timeout (Integer)
  • not_verification (Boolean)
    • Whether or not we are ‘NOT’ verifying something about the element



9
10
11
12
13
14
# File 'lib/element_verification.rb', line 9

def initialize(element, timeout, fail_test: false, element_should_exist: true)
  @element = element # Selement
  @timeout = timeout
  @should_exist = element_should_exist
  @fail_test = fail_test
end

Instance Method Details

#attribute(attribute, value) ⇒ Object

TODO:

Raises:

  • (NotImplementedError)


137
138
139
# File 'lib/element_verification.rb', line 137

def attribute(attribute, value)
  raise NotImplementedError
end

#css(attribute, value) ⇒ Object

TODO:

Raises:

  • (NotImplementedError)


142
143
144
# File 'lib/element_verification.rb', line 142

def css(attribute, value)
  raise NotImplementedError
end

#notObject



16
17
18
# File 'lib/element_verification.rb', line 16

def not
  ElementVerification.new(@element, @timeout, fail_test: @fail_test, element_should_exist: false)
end

#presentObject



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/element_verification.rb', line 93

def present
  fail_message = nil
  pass_message = nil
  should_be_present = @should_exist

  if should_be_present
    fail_message = "Element should be present. timed out after #{@timeout} seconds"
    pass_message = "is present."
  else
    fail_message = "Element should NOT be present. timed out after #{@timeout} seconds"
    pass_message = "is not present."
  end

  wait = Selenium::WebDriver::Wait.new :timeout => @timeout, :interval => 1
  begin
    wait.until do
      element_is_present = @element.element(timeout: @timeout).present?
      if element_is_present && should_be_present
        ElementExtensions.highlight(@element) if Gridium.config.highlight_verifications
        log_success(pass_message)
        return @element
      elsif !element_is_present && !should_be_present
        Log.debug("[GRIDIUM::ElementVerification] Confirming element is NOT present...")
        log_success(pass_message)
      else
        # TODO: @rizzza: This `.not` case is wrong. It bails too early and does not evaluate with the wait block
        log_issue(fail_message)
      end
    end
    @element
  end
end

#selectedObject

TODO:

Raises:

  • (NotImplementedError)


132
133
134
# File 'lib/element_verification.rb', line 132

def selected
  raise NotImplementedError
end

#text(text) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/element_verification.rb', line 20

def text(text)
  fail_message = nil
  pass_message = nil
  should_have_text = @should_exist
  element_text = @element.text
  if @element.present?
    $verification_passes += 1
  else
    Log.error("[GRIDIUM::ElementVerification] Cannot determine element text.  Element is not present.")
  end

  if should_have_text
    fail_message = "Element should contain text (#{text}), but does not. timed out after #{@timeout} seconds"
    pass_message = "contains text (#{text})."
  else
    fail_message = "Element should not contain text (#{text}), but does. timed out after #{@timeout} seconds"
    pass_message = "does not contain text (#{text}).  Actual text is: (#{element_text})."
  end

  wait = Selenium::WebDriver::Wait.new :timeout => @timeout, :interval => 1
  begin
    wait.until do
      element_contains_text = element_text.eql?(text)
      if should_have_text && element_contains_text
        Log.debug("[GRIDIUM::ElementVerification] Confirming text (#{text}) is within element...")
        ElementExtensions.highlight(@element) if Gridium.config.highlight_verifications
        log_success(pass_message)
      elsif !should_have_text && !element_contains_text
        Log.debug("[GRIDIUM::ElementVerification] Confirming text (#{text}) is NOT within element...")
        ElementExtensions.highlight(@element) if Gridium.config.highlight_verifications
        log_success(pass_message)
      else
        # TODO: @rizzza: This `.not` case is wrong. It bails too early and does not evaluate with the wait block
        log_issue("#{fail_message}  Element's text is: (#{element_text}).")
      end
    end
    @element
  end
end

#value(value) ⇒ Object

TODO:

Raises:

  • (NotImplementedError)


127
128
129
# File 'lib/element_verification.rb', line 127

def value(value)
  raise NotImplementedError
end

#visibleObject



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/element_verification.rb', line 60

def visible
  fail_message = nil
  pass_message = nil
  should_be_visible = @should_exist

  if should_be_visible
    fail_message = "Element should be visible. timed out after #{@timeout} seconds"
    pass_message = "Element is visible."
  else
    fail_message = "Element should not be visible. timed out after #{@timeout} seconds"
    pass_message = "Element is not visible."
  end

  wait = Selenium::WebDriver::Wait.new :timeout => @timeout, :interval => 1
  begin
    wait.until do
      element_is_displayed = @element.element(timeout: @timeout).displayed?
      if element_is_displayed && should_be_visible
        ElementExtensions.highlight(@element) if Gridium.config.highlight_verifications
        log_success(pass_message)
        return @element
      elsif !element_is_displayed && !should_be_visible
        Log.debug("[GRIDIUM::ElementVerification] Confirming element is NOT visible...")
        log_success(pass_message)
      else
        # TODO: @rizzza: This `.not` case is wrong. It bails too early and does not evaluate with the wait block
        log_issue(fail_message)
      end
    end
    @element
  end
end