验证页面内的链接

时间:2011-09-06 20:55:35

标签: jquery selenium hyperlink webdriver

我的申请表中有帮助链接。当用户单击此链接时,将打开一个包含帮助内容的新浏览器窗口。左侧有一个像树一样的菜单。单击每个菜单时,右侧面板上会显示相应的帮助内容。我想编写一个自动脚本,它将遍历左侧的所有菜单并确保它们有效。我还需要验证内容中的链接是否有效。 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> 

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

要添加到Jack的答案,您可以指定要查看特殊类的所有链接,例如class =“checkme”,然后您可以这样做:

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

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

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

哪会给你最好的性能提升,BTW,你可以在对象循环内访问href标签,如下所示:

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

同样,所有这些都要求你包括jquery。

答案 2 :(得分:0)

这就是我最终要做的事情。我无法以某种方式使用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;
    }
}