2010-05-27 54 views
2

我正在使用Selenium IDE和Selenium RC檢查網站上的鏈接,但我無法找到一種方式來斷言鏈接指向指定的URL並具有指定的文本。如何斷言超鏈接指向給定的URL?

限制條件:

  • 定位通過DOM或XPath的元件是不可行的,它將使測試脆
  • 存在具有相同的鏈接文本

的HTML多個鏈接元素:

<a href="path_x">link text</a> 
<a href="path_y">link text</a> 

我想要做的測試(rspec):

page.is_element_present?("Href=path_y, Link=link text").should be_true 
#locator parameters are in order of preference 

任何想法?

回答

1

你可以使用isElementPresent如下:

assertTrue(selenium.isElementPresent("//a[text()='Example Link' and @href='http://www.example.com/']"); 
+0

我可以和我會。打的好!謝謝。 – arnthorsnaer 2010-05-28 20:04:11

2

我想get_attribute應該有所幫助。你應該從鏈接得到href,它是屬性。

+1

有趣。在我的情況下,我有多個具有相同文本的元素,但希望避免通過xpath或dom調用元素。 get_attribute在給定與多個元素匹配的定位符時不返回數組。相反,它返回第一個元素。 – arnthorsnaer 2010-05-27 16:15:16

+0

@ arnthorsnaer.mp然後使用id屬性,它應該是唯一的。或者使用xpath - 我總是使用它,爲什麼不呢? – Andrey 2010-05-27 17:22:25

+0

該鏈接沒有ID's :) 如果必須,我將使用xpath,但是使我的測試依賴於視圖實現細節確實使它們變得更脆弱。 我會給你投票,但我缺乏聲望點。 – arnthorsnaer 2010-05-27 17:45:29

1

考慮下面的HTML:

<html> 
    <body> 
    <a id="myLink" href="http://www.example.com">Example Link</a> 
    </body> 
</html> 

您可以使用下面的命令硒(使用Java/TestNG的,和硒的1.x)

assertEquals(selenium.getText("[email protected]"), "Example Link"); 
assertEquals(selenium.getAttribute("[email protected]"), "http://www.example.com/"); 

使用Selenium 2.x的例子可能是:

WebElement myLink = driver.findElement(By.id("myLink")); 
assertEquals(myLink.getText(), "Example Link"); 
assertEquals(myLink.getAttribute("href"), "http://www.example.com/"); 
+0

好的建議,但我希望能夠選擇沒有指定ID的元素(通過多個鏈接和相同的文本鏈接和HREF)。 – arnthorsnaer 2010-05-27 15:59:52

+0

你可能應該提到在你的問題中=)如果你更新了這個問題(可能是用HTML片段),我會很樂意嘗試一個更合適的答案。 :) – 2010-05-27 16:39:13

+0

感謝提示戴夫。我已經更新了這個問題。 – arnthorsnaer 2010-05-27 17:14:18