2

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

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

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

我收到一条消息,说找不到该元素。我正在使用 xpath,因为驱动程序包似乎没有专门用于查找文本的子程序.. 至少不是我找到的。

如果我的 xpath 设置错误或者有人知道更好的方法,那将非常有帮助。我也遇到了一些按钮点击的问题..但这似乎应该更容易并且困扰着我。

4

2 回答 2

1

在网页上查找文本并将该文本与使用 Selenium::Remote::Driver 的某些“已知良好值”进行比较可以实现如下:

文件: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");

上面使用 $locator 标识的定位方案找到 $target 标识的元素,并将其存储在变量 $text 中。然后,您可以根据需要/需要使用它来比较/验证。

于 2012-05-09T21:08:28.390 回答
0

https 的加载速度比 http 慢一点。虽然 WebDriver 非常适合等到它发现请求的页面已完全加载,但也许你需要在这里给它一点帮助。添加睡眠(2);在 get() 调用之后,看看它是否有效。如果是这样,请尝试减少到​​ 1 秒。您还可以调用 get_title 来查看您是否已加载您认为拥有的页面。

另一种可能性是您的文本目标与页面上的内容并不完全相同。您可以尝试先查找一个单词,例如“April”,然后查看是否命中,然后展开直到找到不匹配的内容(例如,该字符串实际上是否有换行符或换行符?HTML 怎么样?实体,例如不间断空间?)。此外,您正在 div 下的任何地方寻找那段文本(所有子文本应该是连接的,然后搜索完成)。这更有可能撒网太广,而不是什么都得不到,但值得知道。

于 2013-05-31T19:16:20.230 回答