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