rudra 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rudra.rb +90 -6
- metadata +22 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff3f69221a8e01fb0c0bf5a517c11547872f475b4cdc7aa551a26f81929c8373
|
4
|
+
data.tar.gz: e039db5f85576af890d9b58f8deed4f7f30cf09ea474d8b2226c6574cad9c115
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a632f5ee68fa9417a78e86642246c47d2b4480292ca4816471b8f948458d7c6444150ccb7eb1a65fe8d7167f25dca32e1271f97cd725dbc86643362d763d4361
|
7
|
+
data.tar.gz: 9edc12b61b22302ef0d80698a682d859a124acaa7c3d121d87353f83c84fef948f9fa93971ce85074c4b7faf52b27bf9ebef4bdedcb14429a8ef7222b73854f3
|
data/lib/rudra.rb
CHANGED
@@ -177,7 +177,7 @@ class Rudra
|
|
177
177
|
|
178
178
|
element ||= driver.find_element(how, what)
|
179
179
|
|
180
|
-
|
180
|
+
raise Selenium::WebDriver::Error::NoSuchElementError, "Failed to find element: #{locator}" unless element
|
181
181
|
|
182
182
|
wait_for { element.displayed? }
|
183
183
|
|
@@ -189,8 +189,11 @@ class Rudra
|
|
189
189
|
# @return [Array<Selenium::WebDriver::Element>] the elements found
|
190
190
|
def find_elements(locator)
|
191
191
|
how, what = parse_locator(locator)
|
192
|
-
driver.find_elements(how, what)
|
193
|
-
|
192
|
+
elements = driver.find_elements(how, what)
|
193
|
+
|
194
|
+
raise Selenium::WebDriver::Error::NoSuchElementError, "Failed to find elements: #{locator}" if elements.empty?
|
195
|
+
|
196
|
+
elements
|
194
197
|
end
|
195
198
|
|
196
199
|
# Move forward a single entry in the browser's history
|
@@ -310,6 +313,7 @@ class Rudra
|
|
310
313
|
end
|
311
314
|
|
312
315
|
# Switch to the frame with the given id
|
316
|
+
# @param [String] id the frame id
|
313
317
|
def switch_to_frame(id)
|
314
318
|
driver.switch_to.frame(id)
|
315
319
|
end
|
@@ -345,6 +349,48 @@ class Rudra
|
|
345
349
|
wait_for { find_element(locator).enabled? }
|
346
350
|
end
|
347
351
|
|
352
|
+
# Wait until the element, identified by locator, is found in frame
|
353
|
+
# @param [String] frame_id the frame id
|
354
|
+
# @param [String] locator the locator to identify the element
|
355
|
+
def wait_for_element_found_in_frame(frame_id, locator)
|
356
|
+
switch_to_frame frame_id
|
357
|
+
|
358
|
+
how, what = parse_locator(locator)
|
359
|
+
|
360
|
+
wait_for do
|
361
|
+
begin
|
362
|
+
driver.find_element(how, what)
|
363
|
+
rescue Selenium::WebDriver::Error::NoSuchWindowError
|
364
|
+
false
|
365
|
+
end
|
366
|
+
end
|
367
|
+
end
|
368
|
+
|
369
|
+
# Wait (in seconds) until the element is not displayed
|
370
|
+
# @param [String, Selenium::WebDriver::Element] locator the locator to
|
371
|
+
# identify the element or Selenium::WebDriver::Element
|
372
|
+
# @param [Integer] seconds seconds before timed out
|
373
|
+
def wait_for_not_visible(locator, seconds = 2)
|
374
|
+
how, what = parse_locator(locator)
|
375
|
+
|
376
|
+
begin
|
377
|
+
wait_for(seconds) do
|
378
|
+
begin
|
379
|
+
elements = driver.find_elements(how, what)
|
380
|
+
elements.empty? || elements.map(&:displayed?).none?
|
381
|
+
rescue Selenium::WebDriver::Error::NoSuchElementError
|
382
|
+
true
|
383
|
+
rescue Selenium::WebDriver::Error::StaleElementReferenceError
|
384
|
+
false
|
385
|
+
end
|
386
|
+
end
|
387
|
+
rescue Selenium::WebDriver::Error::TimeoutError
|
388
|
+
true
|
389
|
+
rescue Net::ReadTimeout
|
390
|
+
true
|
391
|
+
end
|
392
|
+
end
|
393
|
+
|
348
394
|
# Wait until the title of the page including the given string
|
349
395
|
# @param [String] string the string to compare
|
350
396
|
def wait_for_title(string)
|
@@ -393,7 +439,7 @@ class Rudra
|
|
393
439
|
# @param [String] attribute the name of the attribute
|
394
440
|
# @return [String, nil] attribute value
|
395
441
|
def attribute(locator, attribute)
|
396
|
-
find_element(locator).
|
442
|
+
find_element(locator).attribute(attribute)
|
397
443
|
end
|
398
444
|
|
399
445
|
# If the element, identified by locator, has the given attribute
|
@@ -428,7 +474,13 @@ class Rudra
|
|
428
474
|
# @param [String, Selenium::WebDriver::Element] locator the locator to
|
429
475
|
# identify the element or Selenium::WebDriver::Element
|
430
476
|
def click(locator)
|
431
|
-
|
477
|
+
wait_for do
|
478
|
+
begin
|
479
|
+
find_element(locator).click.nil?
|
480
|
+
rescue Selenium::WebDriver::Error::ElementClickInterceptedError
|
481
|
+
false
|
482
|
+
end
|
483
|
+
end
|
432
484
|
end
|
433
485
|
|
434
486
|
# Click the given element, identified by locator, with an offset
|
@@ -741,6 +793,38 @@ class Rudra
|
|
741
793
|
), find_element(locator), event)
|
742
794
|
end
|
743
795
|
|
796
|
+
# Wait until the element, identified by locator, attribute has value
|
797
|
+
# @param [String, Selenium::WebDriver::Element] locator the locator to identify the element
|
798
|
+
# @param [String] attribute the name of the attribute
|
799
|
+
# @param [String] value the value of the attribute
|
800
|
+
def wait_for_attribute_to_include(locator, attribute, value)
|
801
|
+
how, what = parse_locator(locator)
|
802
|
+
|
803
|
+
wait_for do
|
804
|
+
begin
|
805
|
+
driver.find_element(how, what)&.attribute(attribute)&.downcase&.include?(value.downcase)
|
806
|
+
rescue Selenium::WebDriver::Error::StaleElementReferenceError
|
807
|
+
false
|
808
|
+
end
|
809
|
+
end
|
810
|
+
end
|
811
|
+
|
812
|
+
# Wait until the element, identified by locator, excluding string in text
|
813
|
+
# @param [String, Selenium::WebDriver::Element] locator the locator to
|
814
|
+
# identify the element or Selenium::WebDriver::Element
|
815
|
+
# @param [String] string the string to exclude
|
816
|
+
def wait_for_text_to_exclude(locator, string)
|
817
|
+
wait_for { text(locator).exclude?(string) }
|
818
|
+
end
|
819
|
+
|
820
|
+
# Wait until the element, identified by locator, including string in text
|
821
|
+
# @param [String, Selenium::WebDriver::Element] locator the locator to
|
822
|
+
# identify the element or Selenium::WebDriver::Element
|
823
|
+
# @param [String] string the string to compare
|
824
|
+
def wait_for_text_to_include(locator, string)
|
825
|
+
wait_for { text(locator).include?(string) }
|
826
|
+
end
|
827
|
+
|
744
828
|
#
|
745
829
|
# Tool Functions
|
746
830
|
#
|
@@ -1206,7 +1290,7 @@ class Rudra
|
|
1206
1290
|
how.to_sym
|
1207
1291
|
end
|
1208
1292
|
|
1209
|
-
|
1293
|
+
raise Selenium::WebDriver::Error::InvalidSelectorError, "Cannot parse locator: #{locator}" unless HOWS.include?(how)
|
1210
1294
|
|
1211
1295
|
[how, what]
|
1212
1296
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rudra
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Chen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-06-
|
11
|
+
date: 2020-06-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: yard
|
@@ -24,6 +24,26 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.9.25
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 3.9.0
|
34
|
+
- - "~>"
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '3.9'
|
37
|
+
type: :runtime
|
38
|
+
prerelease: false
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 3.9.0
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '3.9'
|
27
47
|
- !ruby/object:Gem::Dependency
|
28
48
|
name: selenium-webdriver
|
29
49
|
requirement: !ruby/object:Gem::Requirement
|