【问题标题】:Validating links inside a page验证页面内的链接
【发布时间】:2011-09-27 00:47:32
【问题描述】:

我的应用程序中有一个帮助链接。当用户单击此链接时,会打开一个带有帮助内容的新浏览器窗口。左侧有一个树状菜单。单击每个菜单时,相应的帮助内容会出现在右侧面板上。我想编写一个自动化脚本,它将遍历左侧的所有菜单并确保它们有效。我还需要验证内容中的链接是否有效。 HTML 结构复杂,有太多的级联框架集和如下框架。

我目前正在使用 selenium 2.0 (webdriver api)。我知道使用 webdriver 我可以切换到框架,单击每个菜单,获取所有链接并验证它们。由于 HTML 有点复杂,我的自动化代码也变得复杂了。

还有其他方法吗?也许是 jQuery 或其他一些 JS 库?该页面没有使用 jQuery,但如果需要,我可以注入一个并使用 jQuery API。

感谢您的帮助!

<html>
  <head>
  <frameset>
     <frame id="toolbar">
     <frame scrolling="auto">
       <html>
          <head>
          <frameset id="whPfset">
            <frame id="minibar_navpane">
              <html>
                <head>
                 <frameset>
                    <frame id="minibar">
                    <frame id="navpane">
                      //here are all the menus on left hand side
                                   //here I want to verify if the menu links are working
                  </frameset>
               </html>
             <frame>
             <frame id="topic">
            //here is the content displayed for a selected menu
                //here I want to verify if the links in the content if any are valid or not
          </frameset>
        </html>
      </frame>
    </frameset>
</html> 

【问题讨论】:

  • 你能发布一个你当前如何选择元素的例子吗?我不知道 selenium 是否会像 一样忽略 标签内的元素。如果没有,内置的 CSS 选择器应该足够灵活来完成任务,或者如果您想使用 jQuery 解决方案,那么实现 jQuery 选择器很容易
  • 我发布了一个答案,显示了我如何选择元素。我不认为 selenium 会忽略 中的元素。我里面有内容,iframe 和 selenium 能够很好地检测到它们。

标签: jquery selenium hyperlink webdriver


【解决方案1】:

这将遍历页面上的所有a 标签。需要 jQuery。

$('a').each(function(index,element){
    //do something
});

【讨论】:

    【解决方案2】:

    要添加到杰克的答案,您可以将所有要查看的链接分配给一个特殊的类,例如 class="checkme",然后您可以这样做:

    $('a.checkme').each(function(index,element){
        //do something
    });
    

    这将带来一点性能提升。更好的是,如果您要检查的所有链接都在具有 ID 集的特定 div 或容器内,您可以这样做:

    $('#divID a.checkme').each(function(index,element){
        //do something
    });
    

    这会给你带来最好的性能提升,顺便说一句,在对象循环中你可以像这样访问 href 标记:

    $(this).attr('href'); // returns url set
    $(this).attr('href', 'hxxp://whatever.com'); // sets the href to a different value.
    

    同样,所有这些都需要您包含 jquery。

    【讨论】:

      【解决方案3】:

      这就是我最终要做的。我无法以某种方式使用 jQuery 切换到帧。我试过$('#navpane').contents().find("a"); 这没有用。也许我不得不在 jQuery 中使用类似的级联方法来切换像 Webdriver 这样的框架。例如$('#frame1').contents().find("#frame2").contents().find("#andsoon"); 之类的东西,所以我最终使用 WebDrivers API 来切换框架、单击链接、验证链接“href”和图像“src”。结果证明它运行良好,没有太多复杂性,也没有使用我最初认为的 jQuery。当您从帧跳到帧时,棘手的部分是driver.switchTo().defaultContent();。感谢大家的帮助和指点。

      @FindBy(css="frame[scrolling='auto']")
      WebElement top;
      @FindBy(css="frameset#whPfset>frame#minibar_navpane")
      WebElement mininav;
      @FindBy(css="frameset#whPfset>frame#topic")
      WebElement topic;
      @FindBy(css="frameset>frame#navpane")
      WebElement nav;
      @FindBy(css="iframe#tocIFrame")
      WebElement tocFrame;
      public int switchToLeftNaviGationFrame(){
          driver.switchTo().defaultContent();
          switchToFrame(top); 
          switchToFrame(mininav);
          switchToFrame(nav);
          switchToFrame(tocFrame);
          return 0;
      }
      public int switchToFrame(WebElement frame){
            try {
              driver.switchTo().frame(frame);
              return 0;
          } catch (Exception e) {
              e.printStackTrace();
                  return 1;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2020-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-01
        • 1970-01-01
        • 2011-12-23
        相关资源
        最近更新 更多