Ifd_Automation 2.9 → 2.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/lib/Ifd_Automation/REST_steps.rb +33 -33
  3. data/lib/Ifd_Automation/SOAP_steps.rb +31 -31
  4. data/lib/Ifd_Automation/assertion_helper.rb +97 -0
  5. data/lib/Ifd_Automation/auto_util.rb +161 -0
  6. data/lib/Ifd_Automation/database_helper.rb +78 -0
  7. data/lib/Ifd_Automation/database_steps.rb +44 -44
  8. data/lib/Ifd_Automation/dynamic_store_value_steps.rb +18 -18
  9. data/lib/Ifd_Automation/email_steps.rb +31 -31
  10. data/lib/Ifd_Automation/file_helper.rb +33 -0
  11. data/lib/Ifd_Automation/file_steps.rb +9 -9
  12. data/lib/Ifd_Automation/mail_helper.rb +56 -0
  13. data/lib/Ifd_Automation/require_libs.rb +9 -9
  14. data/lib/Ifd_Automation/rest_helper.rb +89 -0
  15. data/lib/Ifd_Automation/soap_helper.rb +57 -0
  16. data/lib/Ifd_Automation/ssh_helper.rb +37 -0
  17. data/lib/Ifd_Automation/ssh_steps.rb +15 -15
  18. data/lib/{helper → Ifd_Automation}/step_fallback.rb +0 -0
  19. data/lib/{helper → Ifd_Automation}/tolerance_for_selenium_sync_issues.rb +0 -0
  20. data/lib/Ifd_Automation/version.rb +1 -1
  21. data/lib/{helper → Ifd_Automation}/web_steps_helper.rb +419 -40
  22. data/project/Gemfile +1 -1
  23. data/project/features/TestSuite/WebGUI.feature +4 -4
  24. data/project/features/step_definitions/lib_steps/steps_definition.rb +4 -2
  25. data/project/features/step_definitions/repositories/project_object.yml +2 -1
  26. metadata +13 -13
  27. data/lib/helper/assertion_helper.rb +0 -100
  28. data/lib/helper/auto_util.rb +0 -164
  29. data/lib/helper/database_helper.rb +0 -81
  30. data/lib/helper/file_helper.rb +0 -36
  31. data/lib/helper/mail_helper.rb +0 -58
  32. data/lib/helper/rest_helper.rb +0 -91
  33. data/lib/helper/soap_helper.rb +0 -59
  34. data/lib/helper/ssh_helper.rb +0 -39
@@ -1,5 +1,7 @@
1
1
  require 'net/https'
2
2
  require 'rspec'
3
+ require_relative '../Ifd_Automation/assertion_helper.rb'
4
+
3
5
  def execute_openbrowser(url_site)
4
6
  begin
5
7
  if $_CFWEB['Maximize Browser'] == true
@@ -280,7 +282,7 @@ end
280
282
 
281
283
  def switch_to_frame(element)
282
284
  begin
283
- page.driver.browser.switch_to.frame 'element'
285
+ page.driver.browser.switch_to.frame element
284
286
  rescue Exception => e
285
287
  raise "\n>>> Error: #{e}"
286
288
  exit
@@ -487,11 +489,11 @@ def validate_supported_keys(key)
487
489
  raise "Please select valid keys, invalid key - #{key}" unless check_valid_option_by? key
488
490
  end
489
491
 
490
-
491
- def find_object(string_object)
492
+ def find_object string_object
492
493
  startTime = Time.new.to_i
493
494
  string_object = string_object.gsub(/"/, "'")
494
495
  locator_matching = /(.*?)(\{.*?\})/.match(string_object)
496
+ p "locator_matching:#{locator_matching}"
495
497
  dyn_pros = {}
496
498
  if locator_matching != nil
497
499
  string_object = locator_matching[1]
@@ -499,15 +501,15 @@ def find_object(string_object)
499
501
  dyn_pros[k.to_s.upcase] = v
500
502
  }
501
503
  end
502
-
503
504
  hash_object = $OBJECT[string_object]
504
505
  if hash_object == nil
505
506
  raise "ERROR: >>> Object: #{string_object} is not found in Object Repository."
506
507
  end
507
508
  upcase_attrb = {}
508
509
  if hash_object != nil
509
- hash_object.each { |k, v|
510
+ hash_object.each {|k,v|
510
511
  k = k.to_s.upcase
512
+ p "\n#{k} =~ /ph_/i and dyn_pros[#{k}]: #{k =~ /ph_/i and dyn_pros[k] != nil}"
511
513
  if k =~ /ph_/i
512
514
  if dyn_pros[k] != nil
513
515
  if v =~ /<ph_value>/i
@@ -515,72 +517,208 @@ def find_object(string_object)
515
517
  else
516
518
  upcase_attrb[k[3..k.size-1]] = dyn_pros[k]
517
519
  end
518
-
519
520
  dyn_pros.delete(k)
520
521
  end
521
522
  else
522
523
  upcase_attrb[k.to_s.upcase] = v
523
524
  end
524
-
525
525
  }
526
526
  end
527
527
  ph_attrs = {}
528
- dyn_pros.each { |k, v|
528
+ dyn_pros.each{|k,v|
529
529
  if k =~ /ph_/i
530
530
  ph_attrs[k] = v
531
531
  else
532
532
  upcase_attrb[k.to_s.upcase] = v
533
533
  end
534
534
  }
535
-
536
535
  if upcase_attrb.size > 0
536
+ strId = ""
537
+ strClass = ""
538
+ strName = ""
539
+ strTagname = ""
537
540
  strCssSelector = ""
538
541
  strXpathSelector = ""
542
+ strText = ""
543
+ strRelated = ""
544
+ strRelatedType = ""
545
+
546
+ index = nil
547
+ minWidth = -1
548
+ maxWidth = -1
549
+ minHeight = -1
550
+ maxHeight = -1
539
551
 
552
+ ano_pros = {}
540
553
 
541
- upcase_attrb.each { |key, value|
554
+ upcase_attrb.each{|key, value|
542
555
  upcase_key = key.to_s.upcase
543
556
  case upcase_key
544
557
  when "XPATH_SELECTOR"
545
558
  strXpathSelector = value
546
559
  when "CSS_SELECTOR"
547
560
  strCssSelector = value
561
+ when "ID"
562
+ strId = value
563
+ when "CLASS"
564
+ strClass = value
565
+ when "NAME"
566
+ strName = value
567
+ when "TAGNAME"
568
+ strTagname = value
569
+ when "TEXT"
570
+ strText = value
571
+ when "INDEX"
572
+ index = value
548
573
  else
549
- raise "ERROR: >>> Wrong format type: #{key.to_s} of object: #{string_object}. Available supported format are: XPATH_SELECTOR and CSS_SELECTOR"
574
+ raise "ERROR: >>> Wrong format type: #{key.to_s} of object: #{string_object}. Available supported format are: XPATH_SELECTOR | CSS_SELECTOR | ID | NAME | CLASS | TEXT | TAGNAME | INDEX"
550
575
  end
551
576
  }
577
+ continue_run = true;
578
+ ref_object = nil;
552
579
 
553
- begin
554
- if strCssSelector != nil and strCssSelector.length > 0
555
- foundElements = get_objects_by_css_selector(strCssSelector)
556
- else
557
- foundElements = get_objects_by_xpath_selector(strXpathSelector)
580
+ if strRelated != nil and strRelated.length > 0
581
+ ref_object = find_object(strRelated)
582
+ if (ref_object == nil)
583
+ continue_run = false
558
584
  end
559
- if foundElements == nil or foundElements.length == 0
560
- currentTime = Time.new.to_i
561
- else
562
- # put_log "\nBREAK!!!"
563
- break
564
- end
565
- test = currentTime - startTime
566
- # put_log "\n#TIMEOUNT:#{test} < #{$_CFWEB['Wait Time']}"
567
- sleep(0.5)
568
- end while (currentTime - startTime) < $_CFWEB['Wait Time']
569
-
570
- if foundElements != nil or foundElements.length != 0
571
- return_element = nil
572
- foundElements.each { |cur_element|
573
- passCheck = find_object_check_object(cur_element)
574
- if passCheck
575
- return_element = cur_element
585
+ end
586
+
587
+ if continue_run == true
588
+ begin
589
+ if strCssSelector != nil and strCssSelector.length > 0
590
+ foundElements = get_objects_by_css_selector(strCssSelector)
591
+ elsif strXpathSelector != nil and strXpathSelector.length > 0
592
+ foundElements = get_objects_by_xpath_selector(strXpathSelector)
593
+ else
594
+ strGenerateXpathSel = generate_xpath_selector(strId, strClass, strName, strTagname)
595
+ if strGenerateXpathSel.length > 0
596
+ foundElements = get_objects_by_xpath_selector(strGenerateXpathSel)
597
+ else
598
+ if (check_string_letters_only(strId))
599
+ foundElements = get_objects_by_Id(strId)
600
+ elsif (check_string_letters_only(strName))
601
+ foundElements = get_objects_by_Name(strName)
602
+ elsif (check_string_letters_only(strClass))
603
+ foundElements = get_objects_by_Class(strClass)
604
+ elsif (check_string_letters_only(strTagname))
605
+ foundElements = get_objects_by_Tagname(strTagname)
606
+ end
607
+ end
608
+ end
609
+ if foundElements == nil or foundElements.length == 0
610
+ currentTime = Time.new.to_i
611
+ else
576
612
  break
577
613
  end
578
- }
579
- return return_element
614
+ sleep(0.5)
615
+ end while (currentTime - startTime) < $_CFWEB['Wait Time']
616
+
617
+ if foundElements != nil or foundElements.length != 0
618
+ if index != nil and index.to_i >= 0
619
+ matched_index = 0;
620
+ return_element = nil
621
+ foundElements.each{|cur_element|
622
+ passCheck = find_object_check_object(cur_element, ref_object, strRelatedType, strId, strClass, strName, strTagname, strText, minWidth, maxWidth, minHeight, maxHeight, ano_pros)
623
+ if passCheck
624
+ if matched_index == index.to_i
625
+ return_element = cur_element
626
+ break
627
+ else
628
+ matched_index = matched_index + 1
629
+ end
630
+ end
631
+ }
632
+ return return_element
633
+ else
634
+ return_element = nil
635
+ foundElements.each{|cur_element|
636
+ passCheck = find_object_check_object(cur_element, ref_object, strRelatedType, strId, strClass, strName, strTagname, strText, minWidth, maxWidth, minHeight, maxHeight, ano_pros)
637
+ if passCheck
638
+ return_element = cur_element
639
+ break
640
+ end
641
+ }
642
+ return return_element
643
+ end # if index != nil and index.to_i >= 0
644
+ end #if foundElements != nil or foundElements.length != 0
645
+ end #if continue = true
646
+ end
647
+ return nil
648
+ end
649
+
650
+ def generate_xpath_selector(strId, strClass, strName, strTagname)
651
+ strGenerateXpathSel = ""
652
+ if strId != nil and strId.length > 0 and (strId =~ /^#/) == nil
653
+ strGenerateXpathSel = "[@id='#{strId}']"
654
+ end
655
+ if strClass != nil and strClass.length > 0 and (strClass =~ /^#/) == nil
656
+ strGenerateXpathSel = "#{strGenerateXpathSel}[@class='#{strClass}']"
657
+ end
658
+ if strName != nil and strName.length > 0 and (strName =~ /^#/) == nil
659
+ strGenerateXpathSel = "#{strGenerateXpathSel}[@name='#{strName}']"
660
+ end
661
+
662
+ if strGenerateXpathSel.length > 0
663
+ if strTagname != nil and strTagname.length > 0
664
+ strGenerateXpathSel = "//#{strTagname}#{strGenerateXpathSel}"
665
+ else
666
+ strGenerateXpathSel = "//*#{strGenerateXpathSel}"
580
667
  end
581
668
  end
582
669
 
583
- nil
670
+ return strGenerateXpathSel
671
+ end
672
+
673
+ def check_string_letters_only(strToCheck)
674
+ if strToCheck != nil and strToCheck.length > 0 and strToCheck =~ /^[a-zA-Z]+$/
675
+ return true
676
+ end
677
+ return false
678
+ end
679
+
680
+ def get_objects_by_Id(strId)
681
+ foundElements = nil
682
+ begin
683
+ foundElements = page.all("*[@id='#{strId}']")
684
+ rescue StandardError => e
685
+ raise "\n>>> Error: #{e}"
686
+ end
687
+
688
+ return foundElements
689
+ end
690
+
691
+ def get_objects_by_Class(strClass)
692
+ foundElements = nil
693
+ begin
694
+ foundElements = page.all("*[@class='#{strClass}']")
695
+ rescue StandardError => e
696
+ raise "\n>>> Error: #{e}"
697
+ end
698
+
699
+ return foundElements
700
+ end
701
+
702
+ def get_objects_by_Name(strName)
703
+ foundElements = nil
704
+ begin
705
+ foundElements = page.all("*[@name='#{strName}']")
706
+ rescue StandardError => e
707
+ raise "\n>>> Error: #{e}"
708
+ end
709
+
710
+ return foundElements
711
+ end
712
+
713
+ def get_objects_by_Tagname(strTagname)
714
+ foundElements = nil
715
+ begin
716
+ foundElements = page.all("#{strTagname}")
717
+ rescue StandardError => e
718
+ raise "\n>>> Error: #{e}"
719
+ end
720
+
721
+ return foundElements
584
722
  end
585
723
 
586
724
  def get_objects_by_css_selector(strCssSelector)
@@ -599,23 +737,264 @@ def get_objects_by_xpath_selector(strXpathSelector)
599
737
  foundElements = page.all(:xpath, strXpathSelector)
600
738
  rescue StandardError => e
601
739
  raise "\n>>> Error: #{e}"
602
- exit
603
740
  end
604
741
  foundElements
605
742
  end
606
743
 
607
- def find_object_check_object(cur_element)
744
+ def find_object_check_object(cur_element, ref_object, ref_object_type, strId, strClass, strName, strTagname, strText, minWidth, maxWidth, minHeight, maxHeight, ano_pros)
608
745
  passCheck = true
609
746
  if cur_element != nil
747
+ # Check ref_object
748
+ if (ref_object != nil)
749
+ if find_object_check_ref_object(ref_object, ref_object_type, cur_element) == false
750
+ passCheck = false
751
+ end
752
+ end
753
+
754
+ # Check ID
755
+ if strId != nil and strId.length > 0
756
+ if strId =~ /^#/
757
+ strId = strId[1..-1]
758
+ end
759
+ if find_object_check_Id(cur_element, strId) == false
760
+ passCheck = false
761
+ end
762
+ end
763
+
764
+ # Check Class
765
+ if passCheck and strClass != nil and strClass.length > 0
766
+ if strClass =~ /^#/
767
+ strClass = strClass[1..-1]
768
+ end
769
+ if find_object_check_Class(cur_element, strClass) == false
770
+ passCheck = false
771
+ end
772
+ end
773
+
774
+ # Check Name
775
+ if passCheck and strName != nil and strName.length > 0
776
+ if strName =~ /^#/
777
+ strName = strName[1..-1]
778
+ end
779
+ if find_object_check_Name(cur_element, strName) == false
780
+ passCheck = false
781
+ end
782
+ end
783
+
784
+ # Check Tag name
785
+ if passCheck and strTagname != nil and strTagname.length > 0
786
+ if find_object_check_Tagname(cur_element, strTagname) == false
787
+ passCheck = false
788
+ end
789
+ end
790
+
791
+ # Check Text
792
+ if passCheck and strText != nil and strText.length > 0
793
+ if (strText =~ /^#/)
794
+ strText = strText[1..-1]
795
+ end
796
+
797
+ if find_object_check_Text(cur_element, strText) == false
798
+ passCheck = false
799
+ end
800
+ end
801
+
802
+ # Check minWidth
803
+ if passCheck and minWidth > 0
804
+ if !find_object_check_minWidth(cur_element, minWidth)
805
+ passCheck = false
806
+ end
807
+ end
808
+
809
+ # Check maxWidth
810
+ if passCheck and maxWidth > 0
811
+ if !find_object_check_maxWidth(cur_element, maxWidth)
812
+ passCheck = false
813
+ end
814
+ end
815
+
816
+ # Check minHeight
817
+ if passCheck and minHeight > 0
818
+ if !find_object_check_minHeight(cur_element, minHeight)
819
+ passCheck = false
820
+ end
821
+ end
822
+
823
+ # Check maxHeight
824
+ if passCheck and maxHeight > 0
825
+ if !find_object_check_maxHeight(cur_element, maxHeight)
826
+ passCheck = false
827
+ end
828
+ end
829
+
830
+ # Check another properties
831
+ if passCheck and ano_pros.length > 0
832
+ ano_pros.each{|property, value|
833
+ if value =~ /^#/
834
+ value = value[1..-1]
835
+ end
836
+ if !find_object_check_property(cur_element, property, value)
837
+ passCheck = false
838
+ break
839
+ end
840
+ }
841
+ end
842
+
610
843
  return passCheck
611
844
  end
612
- false
845
+
846
+ return false
847
+ end
848
+
849
+ def find_object_check_Id(element, strId)
850
+ actual_Id = element[:id]
851
+ if actual_Id != nil and actual_Id.length > 0
852
+ actual_Id = actual_Id.strip
853
+ if reg_compare(actual_Id, strId)
854
+ return true
855
+ end
856
+ end
857
+
858
+ return false
859
+ end
860
+ def find_object_check_Class(element, strClass)
861
+ actual_Class = element[:class]
862
+ if actual_Class != nil and actual_Class.length > 0
863
+ actual_Class = actual_Class.strip
864
+ if reg_compare(actual_Class, strClass)
865
+ return true
866
+ end
867
+ end
868
+
869
+ return false
870
+ end
871
+ def find_object_check_Name(element, strName)
872
+ actual_Name = element[:name]
873
+ if actual_Name != nil and actual_Name.length > 0
874
+ actual_Name = actual_Name.strip
875
+ if reg_compare(actual_Name, strName)
876
+ return true
877
+ end
878
+ end
879
+
880
+ return false
881
+ end
882
+
883
+ def find_object_check_Tagname(element, strTagname)
884
+ actual_Tagname = element.tag_name()
885
+ if actual_Tagname != nil and actual_Tagname.length > 0
886
+ actual_Tagname = actual_Tagname.strip
887
+ if reg_compare(actual_Tagname, strTagname)
888
+ return true
889
+ end
890
+ end
891
+
892
+ return false
893
+ end
894
+ def find_object_check_Xpath(element, strXpath)
895
+
896
+ end
897
+ def find_object_check_Text(element, strText)
898
+ actual_Text = element.text()
899
+ if actual_Text != nil and actual_Text.length > 0
900
+ actual_Text = actual_Text.strip
901
+ if reg_compare(actual_Text, strText)
902
+ return true
903
+ end
904
+ end
905
+
906
+ return false
907
+ end
908
+ def find_object_check_minWidth(element, minWidth)
909
+ width = element[:width]
910
+ if (width >= minWidth)
911
+ return true
912
+ end
913
+
914
+ return false
915
+ end
916
+ def find_object_check_maxWidth(element, maxWidth)
917
+ width = element[:width]
918
+ if (width <= maxWidth)
919
+ return true
920
+ end
921
+
922
+ return false
923
+ end
924
+ def find_object_check_minHeight(element, minHeight)
925
+ height = element[:height]
926
+ if (height <= minHeight)
927
+ return true
928
+ end
929
+
930
+ return false
931
+ end
932
+ def find_object_check_maxHeight(element, maxHeight)
933
+ height = element[:height]
934
+ if (height <= maxHeight)
935
+ return true
936
+ end
937
+
938
+ return false
939
+ end
940
+
941
+ def find_object_check_ref_object(ref_object, ref_type, target_element)
942
+ begin
943
+ ref = ref_object.native
944
+ target = target_element.native
945
+ if(ref_type == "up" or ref_type == "down")
946
+ ref_x1 = ref.location.x - 10
947
+ ref_x2 = ref.location.x + ref.size.width + 10
948
+ target_x1 = target.location.x
949
+ target_x2 = target_x1 + target.size.width
950
+ elsif(ref_type == "left" or ref_type == "right")
951
+ ref_y1 = ref.location.y - 10
952
+ ref_y2 = ref.location.y + ref_object.native.size.height + 10
953
+ target_y1 = target.location.y
954
+ target_y2 = target_y1 + target.size.height
955
+ elsif(ref_type == "child" or ref_type == "parent")
956
+ ref_W = ref.location.x + ref.size.width
957
+ ref_H = ref.location.y + ref.size.height
958
+ target_W = target.location.x + target.size.width
959
+ target_H = target.location.y + target.size.height
960
+ end
961
+
962
+ if(ref_type == "up" and
963
+ target_x1 > ref_x1 and target_x2 < ref_x2 and # has same column or X Position
964
+ target.location.y < ref.location.y) # at row or Y position, target is upper
965
+ return true
966
+ elsif(ref_type == "down" and
967
+ target_x1 > ref_x1 and target_x2 < ref_x2 and # has same column or X Position
968
+ target.location.y > ref.location.y) # at row or Y position, target is at down
969
+ return true
970
+ elsif(ref_type == "left" and
971
+ target.location.x < ref.location.x and # at column or X Position, target is at left
972
+ target_y1 > ref_y1 and target_y2 < ref_y2) # at row or Y position, target is same as ref object
973
+ return true
974
+ elsif(ref_type == "right" and
975
+ target.location.x > ref.location.x and # at column or X Position, target is at right
976
+ target_y1 > ref_y1 and target_y2 < ref_y2) # at row or Y position, target is same as ref object
977
+ return true
978
+ elsif(ref_type == "child" and
979
+ (target_W < ref_W) and (target_H < ref_H) and
980
+ (target.location.x > ref.location.x) and (target.location.y > ref.location.y))
981
+ return true
982
+ elsif(ref_type == "parent" and
983
+ (target_W > ref_W) and (target_H > ref_H) and
984
+ (target.location.x < ref.location.x) and (target.location.y < ref.location.y))
985
+ return true
986
+ end
987
+ rescue StandardError => e
988
+ raise "\n>>> Error: #{e}"
989
+ end
990
+
991
+ return false;
613
992
  end
614
993
 
615
994
  def get_object_and_store_as_string(object,string)
616
995
  text = execute_gettext(object)
617
996
  txt = "'" + text + "'"
618
- Utils.set_var(string, txt)
997
+ set_var(string, txt)
619
998
  end
620
999
 
621
1000
 
data/project/Gemfile CHANGED
@@ -1,2 +1,2 @@
1
1
  source 'http://rubygems.org'
2
- gem 'Ifd_Automation'
2
+ # gem 'Ifd_Automation'
@@ -1,4 +1,4 @@
1
- Feature: Jira ticket name
2
-
3
- Scenario: login to system with valid account
4
- Given I open the homepage in Sportpartner
1
+ Feature: test
2
+ @test
3
+ Scenario: test
4
+ Given I open the homepage
@@ -1,3 +1,5 @@
1
- And /I test/ do
2
-
1
+ And /I open the homepage/ do
2
+ execute_openbrowser("https://frontend.sportpartner-staging.test.infodation.vn/dk")
3
+ execute_click("test")
4
+ sleep 10
3
5
  end
@@ -1 +1,2 @@
1
- test: {xpath_selector: '//ul[@id="second-menu"]/li[2]/a'}
1
+ test: {tagname: 'a', name: 'banner-button'}
2
+ test1: {tagname: 'li', class: 'list-inline-item', index: 5}
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: Ifd_Automation
3
3
  version: !ruby/object:Gem::Version
4
- version: '2.9'
4
+ version: 2.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anh Pham
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-03 00:00:00.000000000 Z
11
+ date: 2019-04-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: selenium-webdriver
@@ -267,25 +267,25 @@ files:
267
267
  - lib/Ifd_Automation/REST_steps.rb
268
268
  - lib/Ifd_Automation/SOAP_steps.rb
269
269
  - lib/Ifd_Automation/all_steps.rb
270
+ - lib/Ifd_Automation/assertion_helper.rb
271
+ - lib/Ifd_Automation/auto_util.rb
272
+ - lib/Ifd_Automation/database_helper.rb
270
273
  - lib/Ifd_Automation/database_steps.rb
271
274
  - lib/Ifd_Automation/dynamic_store_value_steps.rb
272
275
  - lib/Ifd_Automation/email_steps.rb
276
+ - lib/Ifd_Automation/file_helper.rb
273
277
  - lib/Ifd_Automation/file_steps.rb
278
+ - lib/Ifd_Automation/mail_helper.rb
274
279
  - lib/Ifd_Automation/require_libs.rb
280
+ - lib/Ifd_Automation/rest_helper.rb
281
+ - lib/Ifd_Automation/soap_helper.rb
282
+ - lib/Ifd_Automation/ssh_helper.rb
275
283
  - lib/Ifd_Automation/ssh_steps.rb
284
+ - lib/Ifd_Automation/step_fallback.rb
285
+ - lib/Ifd_Automation/tolerance_for_selenium_sync_issues.rb
276
286
  - lib/Ifd_Automation/version.rb
277
287
  - lib/Ifd_Automation/web_steps.rb
278
- - lib/helper/assertion_helper.rb
279
- - lib/helper/auto_util.rb
280
- - lib/helper/database_helper.rb
281
- - lib/helper/file_helper.rb
282
- - lib/helper/mail_helper.rb
283
- - lib/helper/rest_helper.rb
284
- - lib/helper/soap_helper.rb
285
- - lib/helper/ssh_helper.rb
286
- - lib/helper/step_fallback.rb
287
- - lib/helper/tolerance_for_selenium_sync_issues.rb
288
- - lib/helper/web_steps_helper.rb
288
+ - lib/Ifd_Automation/web_steps_helper.rb
289
289
  - project/Gemfile
290
290
  - project/README.md
291
291
  - project/cucumber.yml