我正在为我的项目使用Selenium Webdriver。我有一个网页,其中有多个菜单项,而这些菜单项又有子菜单项。我想用nav-left-main div标签替换所有子元素的classname属性"" (空格)以便所有元素在主页面中可见以进行单击(而不是导航到每个菜单 - >子菜单) 基本上我想在id = main下找到classname的所有元素,并用''替换它们。我如何使用selenium webdriver中的JavaScriptExecutor做到这一点?
<div id="nav-left-main">
<div>
<a class="left-nav-icons icomoon-icon-users3 " title="Users" href="#Users-tab">
<div id="Users-sub" class="nav-left-subnav">
<div id="Users-tab" class="hidden-menu">
<ul class="level3menu">
<li>
<i class="cm-icon18 iconfont-arrow-sans-right" style="margin-top:-2px;margin-left:-17px;"></i>
<a>Users</a>
<ul class="second-level-hidden-menu" style="margin-left:5px;margin- top:10px;">
<ul class="second-level-hidden-menu" style="margin-left:5px;margin-top:10px;">
<ul class="second-level-hidden-menu" style="margin-left:5px;margin-top:10px;">
</li>
</ul>
<ul>
<li>
<a id="AdminGroups" class="$item.className" title="" href="cms?action=groupList&pageTitle=Groups">Groups</a>
</li>
</ul>
<ul>
</div>
</div>
</div>
答案 0 :(得分:0)
我假设您正在尝试编写一些自动化测试。请考虑这一点:如果您修改UI内容,您可能会影响页面上其他内容的行为(例如,某些JS假设这些类属性值可能会停止运行)。
或者,注入CSS(通过STYLE或LINK)来改变这些元素的外观和可见性(提示:!important
)。然而,理论上,即使这样也不是理想的解决方案,因为像JS一样(例如)出于同样的原因可能会出现香蕉。
我没有测试网页的经验,但是Selenium不能自动化人类用户的行为吗?换句话说,也许最好的方法是编写测试代码来激活菜单,就像人类用户一样(鼠标悬停等)。
答案 1 :(得分:0)
这可能对您有用:
var main_div = document.getElementById("nav-left-main");
var all_childs = main_div.getElementsByTagName("*"); // get all child elements
for (var i=0; i<all_childs.length; i++)
{
if ( all_childs[i].hasAttribute("class") ) all_childs[i].className = ""; // or all_childs[i].removeAttribute("class")
}