【问题标题】:Perl and Selenium::Remote::DriverPerl 和 Selenium::Remote::Driver
【发布时间】:2016-12-20 21:21:00
【问题描述】:

再次编辑

我在北弗吉尼亚州某处的 AWS 上有一台服务器,这是我的监控服务器。我从另一个州 ssh 进入这个 Ubuntu 服务器来进行系统管理。我想在此服务器上进行 Web 自动化测试,这将测试 Internet 上的 Web 应用程序访问 URL 并验证我是否可以 selenium 测试登录并成功进行身份验证。该服务器位于 AWS 云上,我不太确定要使用哪个 Perl 模块,因为我正在远程访问它。

有两个 CPAN 模块:Selenium::Remote::Driver 和 WWW::Selenium。我都试过了,他们给我带来了问题。而且我真的不知道哪个适合我的场景。当我使用 Selenium::Remote::Driver 时,出现以下错误:

Selenium server did not return proper status at     /usr/local/share/perl/5.18.2/Selenium/Remote/Driver.pm line 401.

当我使用 WWW::Selenium 时,我得到这个错误:

Failed to start new browser session: org.openqa.selenium.server.RemoteCommandException: Error while launching browser

我可以通过导出 DISPLAY 从 AWS 监控服务器手动启动 firefox,但速度真的很慢。我听说我可以使用无头浏览器,但我必须通过以下方式导出 DISPLAY:

export DISPLAY=:5

但是请记住,我是从我的桌面 ssh 到这个 AWS/Selenium 服务器,所以我假设我在从我的桌面 ssh 到它的 AWS/Selenium 服务器上使用上述命令?实际上,在这一点上,我不确定我在这里做什么。有人可以帮忙吗?

【问题讨论】:

  • 所以在你的例子中你的端口是 443...
  • remote_server_addr 应该是主机名或 IP,而不是 URL。
  • 如果您调用$driver->debug_on(),这将触发从远程服务器打印出响应的行为。这可能包含一些有用的信息。

标签: perl selenium automated-tests


【解决方案1】:

这类问题的问题在于,您的设置中配置和二进制文件的种类可能非常广泛,以至于很难为您的设置提供一个直接且正确的答案。 这个答案有以下假设:

  • 您已将 selenium-server-standalone.jar 下载到 /usr/lib/
  • 你有 jdk 1.8(在 shell 中运行 java -version
  • 您已经安装并配置了 xvfb-run(这是一个独立的战斗) 所以:

```

 # ssh to your server , obs the -X !
 ssh -X user-name@server-name

 # start the selenium-server-standalone on the server
 xvfb-run -e /dev/stdout java -Dwebdriver.chrome.driver=/usr/bin/chromedriver -jar /usr/lib/selenium-server-standalone.jar &

  # one liner test - this is one veery long one 
 perl -e 'use strict ; use warnings ; use Data::Printer ; my $host="127.0.0.1"; use Selenium::Remote::Driver;my $driver = Selenium::Remote::Driver->new( "browser_name" =>"chrome", "error_handler" => sub { print $_[1]; croak 'goodbye'; }, "remote_server_addr" => "$host","port"=> "4444");$driver->debug_on();$driver->get("http://www.google.com"); print $driver->get_title();$driver->quit();' &

```

这里是作为 perl 脚本的单行代码

#!/usr/bin/env perl
use strict ;
use warnings ;
use Carp ;
use Data::Printer ;
 use Selenium::Remote::Driver;

my $host="127.0.0.1";
my $driver = Selenium::Remote::Driver->new(
    "browser_name" =>"chrome"
  , "error_handler" => sub { print $_[1]; croak 'goodbye' ; }
  , "remote_server_addr" => "$host"
  , "port"=> "4444") ;
$driver->debug_on() ;
$driver->get("http://www.google.com");
print $driver->get_title();
$driver->quit();

输出应该类似于: ```

        Prepping get
        Executing get
        REQ: POST, http://127.0.0.1:4444/wd/hub/session/ddb9c2575ab026cdb8c640bdc554181b/url, {"url":"http://www.google.com"}
        RES: {"sessionId":"ddb9c2575ab026cdb8c640bdc554181b","status":0,"value":null}

        Prepping getTitle
        Executing getTitle
        REQ: GET, http://127.0.0.1:4444/wd/hub/session/ddb9c2575ab026cdb8c640bdc554181b/title, {}
        RES: {"sessionId":"ddb9c2575ab026cdb8c640bdc554181b","status":0,"value":"Google"}

        GooglePrepping quit
        Executing quit
        REQ: DELETE, http://127.0.0.1:4444/wd/hub/session/ddb9c2575ab026cdb8c640bdc554181b, {}
        RES: {"sessionId":"ddb9c2575ab026cdb8c640bdc554181b","status":0,"value":null}

```

【讨论】:

    【解决方案2】:

    尝试运行以下代码:

    #!/usr/bin/perl  
    use warnings;
    use strict;
    use Selenium::Remote::Driver;
    
    my $host = "10.10.1.1"; //Enter your server IP in this place
    my $driver = new Selenium::Remote::Driver('remote_server_addr' =>  $host,
                                               'port' => '4444', 
                                               'auto_close' => 0);
    $driver->get('http://www.google.com');
    

    【讨论】:

      猜你喜欢
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      • 2020-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      相关资源
      最近更新 更多