1
0

FindBinary.pm 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package Selenium::CanStartBinary::FindBinary;
  2. # ABSTRACT: Coercions for finding webdriver binaries on your system
  3. use Cwd qw/abs_path/;
  4. use File::Which qw/which/;
  5. use IO::Socket::INET;
  6. use Selenium::Firefox::Binary qw/firefox_path/;
  7. require Exporter;
  8. our @ISA = qw/Exporter/;
  9. our @EXPORT_OK = qw/coerce_simple_binary coerce_firefox_binary/;
  10. use constant IS_WIN => $^O eq 'MSWin32';
  11. sub coerce_simple_binary {
  12. my ($executable) = @_;
  13. my $manual_binary = _validate_manual_binary($executable);
  14. if ($manual_binary) {
  15. return $manual_binary;
  16. }
  17. else {
  18. return _naive_find_binary($executable);
  19. }
  20. }
  21. sub coerce_firefox_binary {
  22. my ($executable) = @_;
  23. my $manual_binary = _validate_manual_binary($executable);
  24. if ($manual_binary) {
  25. return $manual_binary;
  26. }
  27. else {
  28. return firefox_path();
  29. }
  30. }
  31. sub _validate_manual_binary {
  32. my ($executable) = @_;
  33. my $abs_executable = eval {
  34. my $path = abs_path($executable);
  35. die unless -e $path;
  36. $path
  37. };
  38. if ( $abs_executable ) {
  39. if ( -x $abs_executable || IS_WIN ) {
  40. return $abs_executable;
  41. }
  42. else {
  43. die 'The binary at ' . $executable . ' is not executable. Choose the correct file or chmod +x it as needed.';
  44. }
  45. }
  46. }
  47. sub _naive_find_binary {
  48. my ($executable) = @_;
  49. my $naive_binary = which($executable);
  50. if (defined $naive_binary) {
  51. return $naive_binary;
  52. }
  53. else {
  54. warn qq(Unable to find the $executable binary in your \$PATH.);
  55. return;
  56. }
  57. }