2012-04-26 167 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下的任何位置的文本(所有兒童文本應該連接在一起,然後搜索完成)。這可能會導致網絡過於寬泛,根本無法獲得任何東西,但值得了解。