Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium:尝试从Perl调整窗口大小:出现一个神秘的JavaScript错误_Javascript_Perl_Selenium - Fatal编程技术网

Selenium:尝试从Perl调整窗口大小:出现一个神秘的JavaScript错误

Selenium:尝试从Perl调整窗口大小:出现一个神秘的JavaScript错误,javascript,perl,selenium,Javascript,Perl,Selenium,我正在使用Perl Selenium包。 试图调整浏览器窗口的大小时,我遇到了一个神秘的JavaScript错误: “引发异常:缺少;before语句” 代码如下: use strict; use warnings; use 5.014; use autodie; use warnings qw< FATAL utf8 >; use Carp; use Carp::Always; use WWW::Selenium; my $url = 'http://www.google.co

我正在使用Perl Selenium包。
试图调整浏览器窗口的大小时,我遇到了一个神秘的JavaScript错误:
“引发异常:缺少;before语句”

代码如下:

use strict;
use warnings;
use 5.014;
use autodie; 
use warnings qw< FATAL utf8 >;
use Carp;
use Carp::Always;
use WWW::Selenium;

my $url = 'http://www.google.com'; #for example
my $sel = WWW::Selenium->new( host => 'localhost',
   port => 4444,
   browser => '*firefox F:\WIN 7 programs\Web & Internet\Firefox 8 bit\firefox.exe',
   browser_url => $url,
   );
$sel->open( $url );
$sel->wait_for_page_to_load(10000);
my $res = $sel->window_maximize();  # So far, this works fine
$res = $sel->get_eval( q{ WebDriver driver = ((WebDriverBackedSelenium) selenium).getWrappedDriver();
   driver.manage().window().setSize(1040,720);} );
   # (Following this: http://stackoverflow.com/questions/1522252/, Eli Colner's post)
如果我删除第一行JavaScript代码,只留下第二行代码,即:

$res = $sel->get_eval( q{driver.manage().window().setSize(1040,720);} );
它与:
“未定义驱动程序”
冲突

将感谢您的帮助-提前感谢

海伦


注意:此处交叉发布:

我在代码中看到无效的javascript,您做出了错误的假设。关于代码所基于的引用SO线程:

是什么让你认为Eli Corner的答案/解决方案是“javascript”?这就是Java或C#否则,因为只有WebDriver(或Selenium 2)的语言绑定公开WebDriverBackedElenium特性。所有其他语言绑定,包括Perl,都没有这样的选项。因此,即使代码语法正确,在执行时也会失败,因为这不是javascript(或者我应该说引用的类/对象不是javascript)

在我看来,您的解决方案选项包括:

  • 使用真正的javascript代码和Dave Hunt的解决方案(在同一个SO线程中)理想情况下应该可以工作,适合Perl:

    $sel->get_eval(“window.resizeTo(1024768);window.moveTo(0,0);”

  • 使用Perl WebDriver绑定来正确使用Eli Corner的解决方案(适用于Perl),而不是您当前使用的Selenium(RC)绑定。Perl WebDriver绑定是Selenium::Remote::Driver,而不是WWW:Selenium。然后您应该能够执行类似的操作(Perl中不需要WebDriverBackedElenium部分,但这确实意味着您必须停止使用Selenium RC移动到WebDriver,没有向后兼容性支持,您需要Java或C#来实现这一点):

    $driver->设置窗口位置(0,0)

    $driver->设置窗口大小(640480)


  • 您当然可以用一行代码来编写它:
    ((WebDriverBackedSelenium)selenium).getWrappedDriver().manage().window().setSize(1040720)
    @Matthias:当用您的建议替换它时,它会在括号中产生错误:
    缺失)。这通常是一个javascript错误,不指向缺失的括号,而是指向无效的javascript,原因是(有时:错误的字符串表示)(请参见Slaks的评论:[.这让我觉得Perl WWW::Selenium模块没有正确地将javascript字符串传递给Selenium服务器。请参见此处:[
    
    $res = $sel->get_eval( q{driver.manage().window().setSize(1040,720);} );