javascript - 使用 WebDriver 扩展 JavaScript 菜单

标签 javascript c# selenium-webdriver

我正在尝试使用 WebDriver 单击网页上的按钮,该按钮使用 JavaScript 展开显示其他链接的菜单:

<div id="menu">
<div id="security_bt" class="advanced_white_close_button" onclick="open_or_close_sub('security');                
security_open++;"><b> <span languageCode = "13">Security</span></b></div>
<div id="advanced_bt" class="advanced_white_close_button" onclick="open_or_close_sub('advanced');     
advanced_open++;"><b><span languageCode = "3011">Advanced Setup</span></b></div>
...etc

我尝试过使用本网站建议的方法,包括 Xpath 和 CSS

Browser.Driver.FindElement(By.XPath("//div[@id='advanced_bt']/b/span")).Click();
or
Browser.Driver.FindElement(By.CssSelector("#advanced_bt > b > span")).Click();

还尝试了 IJavaScriptExecutor:

            var executor = (IJavaScriptExecutor)webDriver;
        executor.ExecuteScript("arguments[0].click();", element);

两者都不起作用。测试不会无法找到元素,所以我不知道为什么无法单击。如果有人能提供任何线索,我们将不胜感激。干杯。

哦,这是 onclick= 代码:

function open_or_close_sub(name)
{

var button_name= name+"_bt";
var sub_name= name+"_sub";
var open_flag= top.document.getElementById(sub_name).style.display;

close_all_sub(sub_name);/* fold all menus first, except the menu which user click*/

var button_div = top.document.getElementById(button_name);
var content_length = button_div.getElementsByTagName("span")[0].innerHTML.length;
if( open_flag == "none")
{
    settingClass(button_div, content_length, "advanced_white_open_button", top.region_class.white_triple, top.region_class.white_double);
    top.document.getElementById(sub_name).style.display="";
}
else
{
    settingClass(button_div, content_length, "advanced_white_close_button", top.region_class.white_triple, top.region_class.white_double);
    top.document.getElementById(sub_name).style.display="none";
}
change_menu_height();
}

最佳答案

尝试下面的代码:

Browser.Driver.FindElement(By.Xpath("//div[@id='advanced_bt']//span[.='Advanced Setup']")).Click();

它将点击 'span 元素',在 id 为'advanced_vt'的 div 标签下,并具有精确的innerHTML/文本作为'高级设置'

或者使用Actions类尝试以下代码:

Actions action  = new Actions(Browser.Driver);
action.MoveToElement(Browser.Driver.FindElement(By.Xpath("//div[@id='advanced_bt']//span[.='Advanced Setup']"))).Click().Perform();
<小时/>

编辑 2014 年 12 月 7 日

如果仍然不起作用,则使用IJavascriptExecutor,将子菜单的属性设置为可见,然后继续对子菜单。从评论中的图像来看,以下代码将显示“高级设置”下的子菜单:

 IWebElement element = Browser.Driver.FindElement(By.Xpath("//div[@id='advanced_sub']"));
 var executor = (IJavaScriptExecutor)webDriver;
 executor.ExecuteScript("arguments[0].style.display='block';", element);

关于javascript - 使用 WebDriver 扩展 JavaScript 菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27305943/

相关文章:

javascript - JavaScript 新手,有一个基本问题

c# - 如何在 MVC Controller 中获取 DropDownList 选定的文本

c# - 将 MySQL 代理连接到 C# 应用程序

java - 等待价格完全加载的最佳方法(例如在比较网站上)

php - 私有(private)函数和公共(public)函数有什么区别?

javascript - 一旦选择框被选中,就从选择框中传递两个值

java - if语句中字符串扫描时出现 "String cannot be resolved to a variable"如何解决?

java - Selenium Webdriver 测试用例 - 测试用例未按顺序执行

javascript - 使用 EventListener 解决 promise

c# - 这个部门有什么问题?