【问题标题】:How to test if href value is a relative value with selenium如何测试href值是否是硒的相对值
【发布时间】:2017-04-14 20:47:42
【问题描述】:

我想测试我的 a 标签中的 href 属性中的值是否是使用 Selenium 的相对路径。

这是我的 HTML:

<a href="/about/somepage/">my page</a>

我使用 selenium 来选择 a 标签:

string hrefValue = _chromeDriver.FindElement(By.TagName("a")).GetAttribute("href");

即使“http://mydomain”部分不在 HTML 中,这也会返回“http://mydomain/about/somepage/”。

如果我使用GetAttribute("pathname"),它会给出我想要的,但是GetAttribute("pathname") 只会给出"/about/somepage/" 的值,即使 HTML 看起来像这样:

<a href="http://myDomain/about/somepage/">my page</a>

那么,我如何测试href 属性的实际值是否与我的网站相关?

【问题讨论】:

    标签: c# selenium automated-tests selenium-chromedriver


    【解决方案1】:

    最简单的方法是查找 A 标记,同时检查其 href 属性,看看它是否以“http”开头。

    Console.WriteLine(driver.FindElements(By.CssSelector(a[href^='http'])).Any());
    

    如果打印的是 False,那么它是相对的。

    【讨论】:

      【解决方案2】:

      Java 版本:

      检索元素(链接)的outerHTML,并检查其中是否包含http://

          WebElement link = driver.findElement(By.linkText("my page"));
      
          String href = link.getAttribute("href");
          String outerHtml = link.getAttribute("outerHTML");
      
          System.out.println("href " + href);
          System.out.println("outerHtml " + outerHtml);
      
          if(outerHtml.contains("href=\"http://")){
              System.out.println(href + " is absolute path");
          }
          else{
              System.out.println(href + " is relative path");
          }
      

      【讨论】:

      • 如果外部 HTML 中的 anything 中包含 http://... 甚至是文本,这很容易给您带来误报。
      • @JeffC,恕我直言,转换并不难。我没有 C# 设置来验证。
      【解决方案3】:

      首先,获取所有hrefhttp开头的链接。因为,链接可能是绝对的或相对的,并且您不知道您想要的链接是否以 http 开头,所以如果列表大于 1,则需要进行额外检查。这是代码 sn-p -

             List<WebElement> links = driver.findElements(By.cssSelector("a[href^='http']"));
      
              if (links.size() == 0) {
                  System.out.println("relative");
              }else {
                  boolean isAbsolute = false;
                  for (WebElement link: links ) {
                      if(link.getText().equals("Visit 2.com!")){
                          isAbsolute = true;
                          break;
                      }
      
                  }
      
                  if (isAbsolute) {
                      System.out.println("absolute");
                  }else {
                      System.out.println("relative");
                  }
              }
      

      【讨论】:

      • 嗨。不幸的是,这将不起作用。您的测试总是会说该域存在。 (这就是问题所在)
      • 我正在为您的解决方案努力。
      【解决方案4】:

      试试这个它应该会给你&lt;a&gt;里面的所有东西然后你可以检查它:

      string hrefValue = _chromeDriver.FindElement(By.TagName("a")).getAttribute("innerHTML")

      编辑:

      改用outerHTML。它应该给整件事

      【讨论】:

      • 这只给了我“我的页面”。无论如何都不是属性中的值
      • 我很确定这不会像您期望的那样返回href="/about/somepage/",而是元素的文本
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-06
      相关资源
      最近更新 更多