2012-04-26 117 views
2

我想用Perl绑定运行Selenium驱动程序,并且由于缺乏示例和文档,我遇到了一些障碍。我已经想出了如何做一些基本的事情,但我似乎遇到了一些其他简单的问题,如使用Remote::Driver包验证页面上的文本。Selenium WebDriver与Perl

如果我尝试做这样的事情:

$sel->get("https://www.yahoo.com/"); 
$ret = $sel->find_element("//div[contains(text(),'Thursday, April 26, 2012')]"); 

我得到一个消息发回的元素不能被发现。我使用的是xpath,因为驱动程序包似乎没有特定的子查找文本..至少不是我发现的。

如果我的xpath设置错误或者如果有人知道更好的方法,那将非常有帮助。我在点击某个按钮时遇到了问题..但是这看起来应该更容易,并且正在扰乱我。

+2

如果你描述一个需要帮助的具体问题,那么这个问题会变得很有用。显示您目前使用的代码以及您想要测试的示例网页。 (请参阅[如何问](http://stackoverflow.com/questions/how-to-ask)和网站[FAQ](http://stackoverflow.com/faq)。 – daxim 2012-04-26 16:28:04

+0

我的一般建议是安装用于firefox的selenium-ide,并将其设置为为您生成perl代码。然后,您可以点击左右,并通过生成适当的代码(使用几种可能的语言)来记录您正在做的事情。至少,如果能给你提供可靠的例子。 – frankc 2012-04-26 17:04:39

+0

我其实是这样做的,但我发现的生成器只适用于WWW :: Selenium软件包,而不是用于Selenium Webdriver的较新的Remote :: Driver库。它很好地打破了一切,但功能完全不同。还有另一个吗?另外,我现在设法使用xpath来处理它。我不知道这是什么,因为我将数据交换回我的网站,并且事情刚刚开始工作。它似乎没有处理查找部分文本,但我想这是可以的。如果有人知道IDE的webdriver格式化程序,我将非常感谢链接! – dubus 2012-04-26 17:06:36

回答

1

查找网页上的文本,并使用Selenium比较文本一些“已知的好值” ::远程::驱动程序可以实现如下所示:

文件:SomeWebApp.pm

package SomeWebApp; 

sub get_text_present { 

    my $self = shift; 
    my $target = shift; 
    my $locator = shift; 

    my $text = $self->{driver}->find_element($target, $locator)->get_text(); 

    return $text; 

} 

某处在您的测试脚本:test.pl

my $text = $some_web_app->get_text_present("MainContent_RequiredFieldValidator6", "id"); 

上述发现使用$定位器,并将其存储在变量$ TE确定的定位方案由$目标标识的元素XT。然后您可以根据需要/需要使用它来比较/验证。

0

https比http稍慢一些。尽管WebDriver在等待确定所请求的页面已完全加载后仍然非常好,但是您可能需要在此处给予一些帮助。添加一个睡眠(2);在get()调用之后调用并查看它是否有效。如果是这样,请尝试减少到​​1秒。你也可以做一个get_title调用,看看你是否加载了你认为拥有的页面。

另一种可能性是,您的文本目标不是相当于与页面上的内容完全相同。你可以尝试先查找一个单词,比如“April”,然后看看你是否得到了一个命中,然后展开直到你发现不匹配为止(例如,这个字符串是否真的有新行或者中断了?怎么样HTML实体如非破坏性空间?)。此外,您正在寻找div下的任何位置的文本(所有儿童文本应该连接在一起,然后搜索完成)。这可能会导致网络过于宽泛,根本无法获得任何东西,但值得了解。