【问题标题】:how do I assert that a hyperlink points to a given URL?如何断言超链接指向给定的 URL?
【发布时间】:2010-05-28 16:56:52
【问题描述】:

我正在使用 Selenium IDE 和 Selenium RC 检查网站上的链接,但我无法找到断言链接指向指定 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

有什么想法吗?

【问题讨论】:

    标签: ruby selenium


    【解决方案1】:

    我猜get_attribute 应该会有所帮助。你应该从链接中得到href,它是属性。

    【讨论】:

    • 有趣。但在我的情况下,我有多个具有相同文本的元素,但希望避免通过 xpath 或 dom 调用元素。当给定一个匹配多个元素的定位器时,get_attribute 不返回数组。相反,它返回第一个元素。
    • @arnthorsnaer.mp 然后使用 id 属性,它应该是唯一的。或者使用 xpath - 我总是使用它,为什么不呢?
    • 链接没有 ID :) 如果必须,我将使用 xpath,但让我的测试依赖于视图实现细节确实会使它们更脆弱。我会投票给你,但我没有声望点。
    • @arnthorsnaer 您的测试依赖于视图实现,因为它是 UI 测试。这是正常的。为什么链接不能有 id 顺便说一句?您可以将其包装到 div 并将 id 分配给 div
    • 在这种情况下,我正在编写验收测试,但我不编写软件(并且对控制实现的访问权限有限)。因此,我更关心所呈现的域信息,而不是实现特定的细节。当然,如果我不能解决这个问题,我会使用 xpath :)
    【解决方案2】:

    您可以按如下方式使用isElementPresent

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

    【讨论】:

    • 我可以而且我会的。打的好!谢谢。
    【解决方案3】:

    给定以下 HTML:

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

    您可以使用以下 Selenium 命令(使用 Java/TestNG 和 Selenium 1.x)

    assertEquals(selenium.getText("id=myLink@href"), "Example Link");
    assertEquals(selenium.getAttribute("id=myLink@href"), "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/");
    

    【讨论】:

    • 好建议,但我希望能够在不指定 ID 的情况下选择元素(通过链接和 href,因为多个链接具有相同的文本)。
    • 您可能应该在问题中提到这一点=)如果您更新问题(可能使用 HTML sn-p),我很乐意尝试更合适的答案。 :)
    猜你喜欢
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 2012-04-15
    相关资源
    最近更新 更多