legacy.test 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. use strict;
  2. use warnings;
  3. use Cwd qw{abs_path};
  4. use FindBin;
  5. use Test::More;
  6. use Test::Fatal;
  7. use Test::Deep;
  8. use Selenium::Remote::Driver;
  9. use Selenium::Remote::WDKeys;
  10. my $driver = Selenium::Remote::Driver->new(
  11. remote_server_addr => '10.17.64.252',
  12. port => 4444,
  13. browser_name => 'firefox',
  14. accept_ssl_certs => 1,
  15. );
  16. isa_ok($driver,'Selenium::Remote::Driver',"Can get new S::R::D with WebDriver3");
  17. $driver->debug_on();
  18. is($driver->get_capabilities()->{browserName},'firefox',"Can get Capabilities correctly (WD2)");
  19. my $sessions = $driver->get_sessions();
  20. is(scalar(@$sessions),1,"Can fall back to selenium2 to list sessions");
  21. ok($driver->status()->{build}->{version},"status reports OK (WD2)");
  22. #TODO do something about available_engines
  23. is( exception { $driver->set_timeout('page load',10000) }, undef, "WD2 set_timeout pageload OK");
  24. is( exception { $driver->set_timeout('script',10000) }, undef, "WD2 set_timeout script OK");
  25. is( exception { $driver->set_timeout('implicit',10000) }, undef, "WD2 set_timeout implicit OK");
  26. is( exception { $driver->set_async_script_timeout(20000) }, undef, "WD2 set_async_script_timeout OK");
  27. is( exception { $driver->set_implicit_wait_timeout(5000) }, undef, "WD2 set_implicit_wait_timeout OK");
  28. my $loc = abs_path("$FindBin::Bin/test.html");
  29. my $local_loc = $driver->upload_file($loc);
  30. note $local_loc;
  31. ok($driver->get("file://$local_loc"),"Can load a web page (WD2)");
  32. is($driver->get_alert_text(),"BEEE DOOO","get_alert_text works (WD2)");
  33. is(exception { $driver->dismiss_alert() }, undef, "alert can be dismissed (WD2)");
  34. #This sucker wants "value" instead of "text" like in legacy
  35. ok($driver->send_keys_to_prompt("HORGLE"),"send_keys_to_prompt works (WD2)");
  36. is(exception { $driver->accept_alert() }, undef, "alert can be accepted (WD2)");
  37. my $handle = $driver->get_current_window_handle();
  38. ok($handle,"Got a window handle (WD2)");
  39. cmp_bag($driver->get_window_handles(),[$handle],"Can list window handles (WD2)");
  40. my $sz = $driver->get_window_size();
  41. ok(defined $sz->{height},"get_window_size works (WD2)");
  42. ok(defined $sz->{width},"get window size works (WD2)");
  43. my $pos = $driver->get_window_position();
  44. ok(defined $pos->{x},"get_window_size works (WD2)");
  45. ok(defined $pos->{y},"get window size works (WD2)");
  46. like($driver->get_current_url(),qr/test.html$/,"get_current_url works (WD2)");
  47. like($driver->get_title(),qr/test/i,"get_title works (WD2)");
  48. my $otherloc = abs_path("$FindBin::Bin/other.html");
  49. my $other_local_loc = $driver->upload_file($otherloc);
  50. note $other_local_loc;
  51. $driver->get("file://$other_local_loc");
  52. $driver->go_back();
  53. $driver->dismiss_alert();
  54. $driver->dismiss_alert();
  55. like($driver->get_title(),qr/test/i,"go_back works (WD2)");
  56. $driver->go_forward();
  57. like($driver->get_page_source(),qr/ZIPPY/,"go_forward & get_page_source works (WD2)");
  58. is(exception { $driver->refresh() }, undef, "refresh works (WD2)");
  59. $driver->go_back();
  60. $driver->dismiss_alert();
  61. $driver->dismiss_alert();
  62. #TODO execute_*_script testing
  63. ok($driver->screenshot(),"can get base64'd whole page screenshot (WD2)");
  64. isa_ok($driver->find_element('red','class'),"Selenium::Remote::WebElement");
  65. isa_ok($driver->find_element('text','name'),"Selenium::Remote::WebElement");
  66. isa_ok($driver->find_element('Test Link', 'link_text'),"Selenium::Remote::WebElement");
  67. isa_ok($driver->find_element('Test', 'partial_link_text'),"Selenium::Remote::WebElement");
  68. is(scalar(@{$driver->find_elements('red','class')}),2,"can find multiple elements correctly");
  69. my $lem = $driver->find_element('body', 'tag_name');
  70. isa_ok($driver->find_child_element($lem, 'red','class'),"Selenium::Remote::WebElement");
  71. isa_ok($driver->find_child_element($lem, 'text','name'),"Selenium::Remote::WebElement");
  72. isa_ok($driver->find_child_element($lem, 'Test Link', 'link_text'),"Selenium::Remote::WebElement");
  73. isa_ok($driver->find_child_element($lem, 'Test', 'partial_link_text'),"Selenium::Remote::WebElement");
  74. $lem = $driver->find_element('form','tag_name');
  75. is(scalar(@{$driver->find_child_elements($lem,'./*')}),6,"can find child elements (WD2)");
  76. isa_ok($driver->get_active_element(),"Selenium::Remote::WebElement");
  77. TODO: {
  78. local $TODO = "These methods aren't supported on firefox";
  79. is(exception { $driver->cache_status() },undef, "cache_status works in WD2");
  80. is(exception {
  81. $driver->set_geolocation(location => {
  82. latitude => 40.714353,
  83. longitude => -74.005973,
  84. altitude => 0.056747
  85. });
  86. }, undef, "set_geolocation works in WD2");
  87. is(exception { $driver->get_geolocation() }, undef, "get_geolocation works in WD2");
  88. is(exception { $driver->set_orientation("LANDSCAPE") }, undef, "set_orientation works in WD2");
  89. is(exception { $driver->get_orientation() }, undef, "get_orientation works in WD2");
  90. }
  91. ok($driver->get_log('server'), "get_log fallback works");
  92. ok( scalar(@{$driver->get_log_types()}),"can fallback for get_log_types");
  93. like($driver->upload_file($otherloc),qr/other.html$/,"upload_file fallback works");
  94. #Jinkies, this stuff is cool, it prints the selenium server help page @_@
  95. #diag explain $driver->get_local_storage_item('whee');
  96. #diag explain $driver->delete_local_storage_item('whee');
  97. ok($driver->switch_to_frame($driver->find_element('frame', 'id')),"can switch to frame (WD2)");
  98. ok($driver->switch_to_frame(),"can switch to parent frame (WD2 only)");
  99. ok($driver->set_window_position(1,1),"can set window position (WD2)");
  100. ok($driver->set_window_size(200,200),"can set window size (WD2)");
  101. ok($driver->maximize_window(),"can maximize window (WD2)");
  102. is(scalar(@{$driver->get_all_cookies()}),1,"can get cookie list (WD2)");
  103. $driver->delete_all_cookies();
  104. is(scalar(@{$driver->get_all_cookies()}),0,"can delete all cookies (WD2)");
  105. ok($driver->mouse_move_to_location( element => $driver->find_element('a','tag_name')),"Can use mouse_move_to_location");
  106. $driver->click();
  107. my $handles = $driver->get_window_handles();
  108. is(scalar(@$handles),2,"Can move to element and then click it correctly (WD2)");
  109. $driver->switch_to_window($handles->[1]);
  110. is(exception { $driver->close() }, undef, "Can close new window (WD2)");
  111. cmp_bag($driver->get_window_handles,[$handles->[0]],"Correct window closed (WD2)");
  112. $driver->switch_to_window($handles->[0]);
  113. my $input = $driver->find_element('input','tag_name');
  114. $driver->mouse_move_to_location( element => $input );
  115. $driver->click();
  116. #TODO pretty sure this isn't working right
  117. SKIP: {
  118. skip("P.sure send_modifier is kind of screwed up",1);
  119. $driver->send_modifier('Shift','down');
  120. }
  121. $driver->send_keys_to_active_element('howdy',KEYS->{tab});
  122. $input->send_keys('eee');
  123. $driver->mouse_move_to_location( element => $driver->find_element('body','tag_name'));
  124. $driver->click();
  125. #XXX this has to be a BUG in the driver, the keys are getting thru
  126. is($input->get_attribute('value'),'defaulthowdyeee',"element->get_attribute() works (WD2)");
  127. is($input->get_attribute('value',1),'defaulthowdyeee',"element->get_attribute() second arg ignored (WD2)");
  128. is($driver->execute_script(qq/ return document.querySelector('input').value /),'defaulthowdyeee',"execute_script works, and so does send_keys_to_active_element & element->send_keys (WD2)");
  129. $input->clear();
  130. is($input->get_attribute('value'),'',"clear() works (WD2)");
  131. is(exception { $driver->button_down() },undef,"Can button down (WD2)");
  132. is(exception { $driver->button_up() },undef,"Can button up (WD2)");
  133. ok($driver->find_element('radio2','id')->is_selected(),"WD2 is_selected() works");
  134. my $l1 = $driver->find_element('radio1','id');
  135. SKIP: {
  136. skip "set_selected, toggle_element, is_selected looks broke", 1;
  137. $l1->set_selected();
  138. $l1->set_selected();
  139. ok($l1->is_selected(),"WD2 set_selected works");
  140. $l1->toggle();
  141. ok(!$l1->is_selected(),"WD2 toggle works: off");
  142. $l1->toggle();
  143. ok($l1->is_selected(),"WD2 toggle works: on");
  144. }
  145. my $l2 = $driver->find_element('hammertime','id');
  146. is( $l2->is_enabled(),0,"is_enabled works (WD2)");
  147. ok( $l2->get_element_location()->{x},"Can get element rect (WD2)");
  148. ok( $l2->get_size()->{'height'}, "Size shim on rect works (WD2)");
  149. is( $l2->get_tag_name(),'input',"get_tag_name works (WD2)");
  150. is( exception { $l2->get_element_location_in_view() }, undef, "get_element_location_in_view not available in WD2");
  151. is($driver->find_element('hidon','id')->is_displayed(),0,"is_displayed returns false for type=hidden elements");
  152. is($driver->find_element('no-see-em','id')->is_displayed(),0,"is_displayed returns false for display=none");
  153. is($driver->find_element('h1','tag_name')->get_text(),'Howdy Howdy Howdy', "get_text works (WD2)");
  154. $driver->find_element('clickme','id')->click();
  155. is(exception { $driver->dismiss_alert() }, undef, "Can click element (WD2)");
  156. $driver->find_element('form','tag_name')->submit();
  157. like($driver->get_page_source(),qr/File not found/,"elem submit() works (WD2)");
  158. #Pretty sure this one has enough 'inertia' to not disappear all the sudden
  159. $driver->get('http://w3.org/History.html');
  160. $driver->add_cookie('foo','bar',undef,undef,0,0,time()+5000);
  161. is(scalar(@{$driver->get_all_cookies()}),1,"can set cookie (WD2)");
  162. $driver->delete_cookie_named('foo');
  163. is(scalar(@{$driver->get_all_cookies()}),0,"can delete named cookies (WD2)");
  164. is(exception { $driver->quit() }, undef, "Can quit (WD2)");
  165. done_testing();