如何在 perl $sel->click 下使用 Selenium 点击 Javascript

Posted

技术标签:

【中文标题】如何在 perl $sel->click 下使用 Selenium 点击 Javascript【英文标题】:How to click on Javascript using Selenium under perl $sel->click 【发布时间】:2013-07-03 10:48:51 【问题描述】:

我一直在使用 Selenium IDE 和 Selenium Remote Driver 来测试一个网站。当我将文件导出到 perl 并尝试运行它时,尝试打开 javascript 链接时出现错误。这是我一直在尝试的代码:

#!/usr/bin/perl
use strict;
use warnings;
use Time::HiRes qw(sleep);
use Test::WWW::Selenium;
use Test::More "no_plan";
use Test::Exception;
use Env;

my $sel = Test::WWW::Selenium->new( host => "localhost", 
                                port => 4444, 
                                browser => "*firefox", 
                                browser_url => "http://cpc.cs.qub.ac.uk/" );


$sel->open_ok("http://cpc.cs.qub.ac.uk/" , undef, "Getting Webpage CPC");
$sel->set_speed("1000");            
$sel->wait_for_page_to_load_ok("10000");    
$sel->select_frame_ok("toolbar");

$sel->click_ok(" //a[contains(\@href,'javascript:goTo(overview.html');)] ");
#and tried this format as well
$sel->click_ok("//a[\@href='javascript:goTo('overview.html');']");
$sel->wait_for_page_to_load_ok("10000");    

它说找不到元素,我一直在尝试使用 Xpath 作为定位器,但似乎无法定位。以下是我要点击的链接的 html:

<title>CPC Toolbar</title>
        <script language="javascript" src="./toolbar.js"></script>

<tr>
    <td align="center" >
    <a href="javascript:goTo('overview.html');" onMouseover="libserv.src='icons/redlibserv.gif'" onMouseout="libserv.src='icons/bluelibserv.gif'"><IMG SRC="icons/bluelibserv.gif" name="libserv"   border="0">
    </a>
    </td>   
</tr>

任何有关如何实现这一点的帮助将不胜感激。在 WWW::Selenium 模块中,它也提供了这些 xpath 格式以用作定位器:

xpath=//img[@alt='The image alt text']
xpath=//table[@id='table1']//tr[4]/td[2]
xpath=//a[contains(@href,'#id1')]
xpath=//a[contains(@href,'#id1')]/@class
xpath=(//table[@class='stylee'])//th[text()='theHeaderText']/../td
xpath=//input[@name='name2' and @value='yes']
xpath=//*[text()="right"]

【问题讨论】:

【参考方案1】:

我认为这是 Firefox 22 和 selenium 的问题,在发布时尚未解决

编辑 - 来源:https://code.google.com/p/selenium/issues/detail?id=5554

【讨论】:

感谢 user1697631。我也读过那个。大多数人降级到FF21。所以我正在这样做。但这似乎解决了他们的大部分问题。 实际上,似乎有一个修复程序,需要下载 IDE 2.1.0。更多信息在这里:code.google.com/p/selenium/issues/detail?id=5841 当我从终端运行它时仍然无法让它工作。任何进一步的帮助都会很棒【参考方案2】:

目前我找到的解决方案是降级到 FF21 并安装 Sel 2.1.0 IDE 工作正常。但是他们已经发布了 sel 2.2.0 IDE,其中包含 FF22 的修复程序,并且可以确认它工作正常。

【讨论】:

【参考方案3】:

Firefox 22 版引入了一个问题,因此 selenium 不能与 FireFox 22 一起使用。

https://code.google.com/p/selenium/issues/detail?id=5554 https://code.google.com/p/selenium/issues/detail?id=5841 https://code.google.com/p/selenium/source/detail?r=d1b1fc24f060

它在 Selenium 2.33 中没有解决,但应该在 2.34 中。与此同时,唯一的解决方案似乎是手动降级到 Firefox 21:

http://support.mozilla.org/en-US/kb/install-older-version-of-firefox https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/21.0/win32/en-US/Firefox%20Setup%2021.0.exe

【讨论】:

【参考方案4】:

XPath 引用错误。您不能使用相同的字符(撇号)来分隔多个内容。

$sel->click_ok(q(//a[@href="javascript:goTo('overview.html');"]));

代码未经测试。

【讨论】:

感谢 daxim 纠正字符串,但是它说它在测试时无法执行命令。错误信息是:值没有实现接口事件。还有什么我遗漏的东西应该在它之前允许它与Javascript交互。如果它有助于来自 firebug 的 Xpath 是 /html/body/p/table/tbody/tr[2]/td/a

以上是关于如何在 perl $sel->click 下使用 Selenium 点击 Javascript的主要内容,如果未能解决你的问题,请参考以下文章

jquery如何在select中一个指定的 option后追加另一个option

perl在windows下如何运行

在 perl 中如何在不使用 XS 的情况下写入调用者的变量?

如何在调试器下运行perl代码块?

如何在不使用命令行的情况下运行 Perl 脚本?

如何在 Perl 中将简单的哈希转换为 json?