Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 选择在HTML中不可见的动态元素_C#_Html_Selenium - Fatal编程技术网

C# 选择在HTML中不可见的动态元素

C# 选择在HTML中不可见的动态元素,c#,html,selenium,C#,Html,Selenium,我在选择元素时遇到困难,因为它会在用户从下拉列表中选择选项时动态生成响应 例如,用户从下拉列表中选择“菜单集”,完成此操作后,工具栏上会出现一个“新建”按钮(ID:d_toolbar_toolbar) 这取决于所选内容的不同,当我使用开发人员工具检查html时,它不会出现在html中 我已经查看了网页的源代码,找到了下面的,它似乎是根据选择动态地将其添加到工具栏上,并使用Javascript <table border="0" cellspacing="2" width="100%" he

我在选择元素时遇到困难,因为它会在用户从下拉列表中选择选项时动态生成响应

例如,用户从下拉列表中选择“菜单集”,完成此操作后,工具栏上会出现一个“新建”按钮(ID:d_toolbar_toolbar)

这取决于所选内容的不同,当我使用开发人员工具检查html时,它不会出现在html中

我已经查看了网页的源代码,找到了下面的,它似乎是根据选择动态地将其添加到工具栏上,并使用Javascript

<table border="0" cellspacing="2" width="100%" height="100%">
<tr>
<td height="24">
<?XML:NAMESPACE PREFIX="TBNS" /><?IMPORT NAMESPACE="TBNS"  IMPLEMENTATION="/webctrl_client/1_0/toolbar.htc" />
<TBNS:Toolbar id="d_toolbar_toolbar" class="standarddarkrow" oncheckchange="javascript:toolbarButtonClicked('{0}','{1}','False',-1,13, true, 'd:toolbar:toolbar')" oncheckchange="JScript:if (event.srcNode != null) __d_toolbar_toolbar_State__.value+=((event.srcNode.getAttribute('selected')=='true')?'+':'-')+event.flatIndex+';';" onbuttonclick="JScript:if (event.srcNode != null) if ((event.srcNode.getType() != 'checkbutton') || (event.srcNode.getAttribute('_autopostback') != null)) if (getAttribute('_submitting') != 'true'){setAttribute('_submitting', 'true');try{__doPostBack('d$toolbar$toolbar',event.flatIndex);}catch(e){setAttribute('_submitting', 'false');}}" onwcready="JScript:try{__d_toolbar_toolbar_State__.value = ''}catch(e){}" defaultstyle="color:black;border:solid 1px #E0E3EA;background:#E0E3EA;padding:0px;" hoverstyle="border:solid 1px #416791;background:#E0E3EA;margin:0px;padding:0px;" selectedstyle="color:black;border:solid 1px #E0E3EA;background:#E0E3EA;padding:0px;" style="border-width:0px;font-family:Tahoma;font-size:8pt;">
<TBNS:ToolbarButton ID="New" imageUrl="http://www.starchef.net/skins/default/new.gif"  onkeydown="if (event.keyCode==13){event.returnValue=false}">New</TBNS:ToolbarButton>


您必须测试应用程序的特定“状态”。这意味着您需要保存特定贴图,并根据下拉选择值测试它们是否存在。这就是包装器或各个层很重要的地方,因为只有当它抛出一个找不到东西的错误时,您才会知道。一个函数验证抛出的错误是否成功,然后返回一个布尔值,这是我发现的最好的方法

//if (dropdown option value == x)
    if (ElementExists(By.XPath(xpathHiddenElement))
      //log what you want to or do some other check
    else
      //log what you want to or do some other check

public bool ElementExists(By by)
{
    try
    {
        IWebElement element = driver.FindElement(by);
        return true;
    }
    catch (NoSuchElementException)
    {
        return false;
    }
}

就我个人而言,我做的远不止这些,但我通常有多个层次、复杂性、错误处理和结果。这是一个简单的示例,可以在不中断测试的情况下查找元素是否存在。

由于这些元素在DOM中不存在,请通过选择主元素,然后使用movebyoffset操作单击来解决

    public void ClickNewMenuSet()
    {
        var element = _driver.FindElement(By.Id(("d_toolbar_toolbar")));
        var actions = new Actions(_driver);
        actions.Click(element).MoveByOffset(-450, 0).Click().Build().Perform();
    }

尝试在Goole Chrome和jQuery上调试它。我们需要检查任何url吗?正如您所说,该元素是动态创建的,请尝试从静态的父元素遍历到该元素并进行检查。该站点仅与兼容,即,我无法发布完整的url,因为它需要登录凭据。有没有一种方法可以使用xpath或css进行选择?我只是尝试导航到“新建”按钮并单击它以导航到下一个屏幕,据我所知,这就是standarddarkrow“新建上述代码不允许我选择此选项?您的按钮地图位于
xpathHiddenElement
位置。这将告诉您按钮是否存在,而不会终止测试。然后,如果返回true,则可以对其执行单击。如果为false,您可以更改下拉选择,以便知道按钮在那里,然后单击它。如果您需要有关将在
xpathHiddenElement
中使用的实际选择的帮助,那么它将有助于提供更多的html…您可以删除内容,只需为标记结构提供一些可识别的内容属性。我已经用完整的HTML编辑了原始帖子,谢谢。在与同事交谈后,这些都不起作用。我们解决这个问题的唯一方法是选择主元素,然后使用新操作(_driver);操作。单击(元素)。移动偏移量(-450,0)。单击().Build().Perform();手动移动并选择按钮。