Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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# Selenium选择不处理某些对象_C#_Html_Selenium_Selenium Webdriver - Fatal编程技术网

C# Selenium选择不处理某些对象

C# Selenium选择不处理某些对象,c#,html,selenium,selenium-webdriver,C#,Html,Selenium,Selenium Webdriver,我无法通过Selenium设置选择对象。这个Select对象有一些与之关联的JavaScript,在加载页面时填充它的“选项”。我相信这会导致它的行为有所不同。通常,我可以使用以下设置选择对象: SelectElement sel = new SelectElement(ele); sel.SelectByText(value); 对于这个特定的对象,相同的代码将成功执行(没有抛出异常),但是没有设置值。请注意,我将sleeps和re-trys放在其中,我确信Select对象在代码执行之前已完

我无法通过Selenium设置选择对象。这个Select对象有一些与之关联的JavaScript,在加载页面时填充它的“选项”。我相信这会导致它的行为有所不同。通常,我可以使用以下设置选择对象:

SelectElement sel = new SelectElement(ele);
sel.SelectByText(value);
对于这个特定的对象,相同的代码将成功执行(没有抛出异常),但是没有设置值。请注意,我将sleeps和re-trys放在其中,我确信Select对象在代码执行之前已完全加载(否则会发生异常)

这两个给我带来麻烦的Select对象看起来也不同于标准的html Select对象,这使我更加相信它们不是标准的Select对象。此图中的前两个下拉列表是比较麻烦的,而其余的则按预期工作:

不幸的是,这是一个我无法让您访问的私人页面,但希望这个HTML片段足够了:

<h3>Details of your primary qualification, examination, or assessment</h3>

<script type="text/javascript" src="/assets/js/jquery.ui.widget.js"></script>
<script type="text/javascript" src="/assets/js/jquery.ui.position.js"></script>
<script type="text/javascript" src="/assets/js/jquery.ui.selectmenu.js"></script>
<script type="text/javascript"> 
    j$(document).ready(function () {
        j$(".field [id$='_drpInstitution']").selectmenu();
        j$(".field [id$='_drpName']").selectmenu();

        j$(".field [id$='_drpInstitution']").change(function () {
            __doPostBack('content_0$ucCourse$drpInstitution', '');
        });

        j$(".field [id$='_drpName']").change(function () {
            __doPostBack('content_0$ucCourse$drpName', '');
        });

    });


</script>
<div class="field">                 
    <label for="content_0_ucCourse_drpInstitution" id="content_0_ucCourse_lblInstitution">Name of Australian institution (university/college/examining body):<em class="required">*</em></label>
    <select name="content_0$ucCourse$drpInstitution" id="content_0_ucCourse_drpInstitution" class="field-l Institution">
        <option value="-1">- Select -</option>
        <option selected="selected" value="Australian Catholic University">Australian Catholic University</option>
        <option value="Avondale College of Higher Education">Avondale College of Higher Education</option>
        <option value="Central Queensland University">Central Queensland University</option>
        <option value="Charles Darwin University">Charles Darwin University</option>
        <option value="Other">- Other -</option>

    </select>
    <em class="hint">If your institution does not appear in the list, please select 'Other' and enter your institution in the text box that appears.</em>
    <span id="content_0_ucCourse_vldInstitution" style="display:none;"></span>
</div>
您的主要资格、考试或评估的详细信息
j$(文档).ready(函数(){
j$(“.field[id$=”\u drpInstitution'])。选择菜单();
j$(“.field[id$=”'u drpName'])。选择菜单();
j$(“.field[id$=”\u drpInstitution']”)。更改(函数(){
__doPostBack(“内容”\u 0$ucCourse$drpInstitution',“”);
});
j$(“.field[id$=”\u drpName']”)。更改(函数(){
__doPostBack('content_0$ucCourse$drpName','');
});
});
澳大利亚机构名称(大学/学院/考试机构):*
-挑选-
澳大利亚天主教大学
阿文代尔高等教育学院
中央昆士兰大学
达尔文大学
-其他-
如果您的机构未出现在列表中,请选择“其他”并在出现的文本框中输入您的机构。
当我检查下拉框时,我得到的不是选择对象,而是以下范围:

<span>
    <a class="ui-selectmenu ui-widget ui-state-default ui-selectmenu-dropdown ui-state-active ui-corner-top" id="content_0_ucCourse_drpInstitution-button" role="button" href="#nogo" tabindex="0" aria-haspopup="true" aria-owns="content_0_ucCourse_drpInstitution-menu" style="width: 460px;" aria-disabled="false">
        <span class="ui-selectmenu-status">Australian Catholic University</span>
        <span class="ui-selectmenu-icon ui-icon ui-icon-triangle-1-s"></span>
    </a>
</span>

当我检查结果下拉列表时,我在页脚中得到一个UL:

<div class="ui-selectmenu-menu" style="z-index: 2; top: 786px; left: 741px;">
    <ul class="ui-widget ui-widget-content ui-selectmenu-menu-dropdown ui-corner-bottom" aria-hidden="true" role="listbox" aria-labelledby="content_0_ucCourse_drpInstitution-button" id="content_0_ucCourse_drpInstitution-menu" style="width: 460px; height: 189px;" aria-disabled="false" tabindex="0" aria-activedescendant="ui-selectmenu-item-562">
        <li role="presentation" class=""><a href="#nogo" tabindex="-1" role="option" aria-selected="false">- Select -</a></li>
        <li role="presentation" class="ui-selectmenu-item-selected"><a href="#nogo" tabindex="-1" role="option" aria-selected="true" id="ui-selectmenu-item-562">Australian Catholic University</a></li>
        <li role="presentation" class=""><a href="#nogo" tabindex="-1" role="option" aria-selected="false">Avondale College of Higher Education</a></li>
        <li role="presentation"><a href="#nogo" tabindex="-1" role="option" aria-selected="false">University of Wollongong</a></li>
        <li role="presentation"><a href="#nogo" tabindex="-1" role="option" aria-selected="false">Victoria University</a></li>
        <li role="presentation" class="ui-corner-bottom"><a href="#nogo" tabindex="-1" role="option" aria-selected="false">- Other -</a></li>
    </ul>
</div>


所有这些都不会出现在页面源代码中,因此都是动态生成的。我目前正在解决选择问题,方法是单击超链接对象
id=content\u 0\u course\u drpInstitution-button
,然后单击超链接对象
text=Australian Catholic University


如果有更好的解决方法,我们将不胜感激。

正如您已经发现的,在这种情况下,下拉列表不是由
select->option
表示的

按原样处理-通过
Id
查找
a
元素(这将是您的“选择”),单击它打开下拉列表;然后,通过链接文本找到带有文本“澳大利亚天主教大学”(这将是您的“选项”)的
a
元素:

IWebElement select = driver.FindElement(By.Id("content_0_ucCourse_drpInstitution-button"));
select.Click();

IWebElement option = select.FindElement(By.LinkText("Australian Catholic University"));
option.Click();

我们也可以用不同的方式来思考这个问题——如果他们对我们隐藏了
select
元素,我们就可以。由于我无法重现问题,因此无法保证它会起作用:

((IJavaScriptExecutor)Driver).ExecuteScript("arguments[0].hidden = false; arguments[0].style.visibility='visible';", element);
其中
元素
指向您的
选择
标记

然后,在使元素可见后,尝试使用
SelectByText()


在进行选择之前调用
ele.click()
是否有任何区别?如果我尝试单击Select元素,则会出现ElementNotVisibleException!但它仍然允许我使用上面的代码设置Select元素。有一个span对象存在于与Select相同的位置,我可以使用它来单击它,但这感觉更像是一个解决方案,而不是一个解决方案。还有什么想法吗?看起来实际的
select+选项
是隐藏的,还有其他元素负责单击和选择选项,通过javascript触发引擎盖下的选择选项更改。我相信你是对的。当我在Chrome调试模式下将鼠标悬停在Select元素上时,页面上没有突出显示任何内容。当这些隐藏的选择对象被使用时,我将不得不进行一次黑客攻击。很好。尝试右键单击下拉列表并选择“Inspect Element”-哪个元素在源代码中突出显示?感谢您的建议和链接。我花了30分钟尝试了
JavaScriptExecutor
的各种实现,虽然所有的实现看起来都成功执行了,但我无法让Select对象工作。我又回到了以前单击
a
元素的状态。
element.SelectByText("Australian Catholic University");