首页 > 解决方案 > C# selenium webdriver 下拉错误:元素不可交互

问题描述

我是新的。我使用 C# 和 Selenium webdriver,我在下面的代码中遇到了这个下拉元素的问题。

<td class="FormFieldControl"><select name="ctl00$body$_Result$ddl" onchange="javascript:setTimeout('__doPostBack(\'ctl00$body$_Result$ddl\',\'\')', 0)" id="body__Result_ddl" class="DropDownList Chosen chzn-rtl chzn-done" style="display: none;">
        <option selected="selected" value=""></option>
        <option value="32">aaaaa</option>
        <option value="64">bbbbb</option>
        <option value="128">ccccc</option>
        <option value="256">ddddd</option>
        <option value="512">eeeee</option>
        <option value="32768">fffff</option>
        <option value="65536">ggggg</option>

    </select><div id="body__Result_ddl_chzn" class="chzn-container chzn-rtl chzn-container-single" style="width: 561px;"><a href="javascript:void(0)" class="chzn-single"><span>Select one item</span><div><b></b></div></a><div class="chzn-drop" style="right: -9000px; width: 559px; top: 26px;"><div class="chzn-search"><input type="text" autocomplete="off" style="width: 524px;"></div><ul class="chzn-results"><li id="body__Result_ddl_chzn_o_1" class="active-result" style="">aaaaa</li><li id="body__Result_ddl_chzn_o_2" class="active-result" style="">bbbbb</li><li id="body__Result_ddl_chzn_o_3" class="active-result" style="">ccccc</li><li id="body__Result_ddl_chzn_o_4" class="active-result" style="">ddddd</li><li id="body__Result_ddl_chzn_o_5" class="active-result" style="">eeeee</li><li id="body__Result_ddl_chzn_o_6" class="active-result" style="">fffff</li><li id="body__Result_ddl_chzn_o_7" class="active-result" style="">ggggg</li></ul></div></div><span id="body__Result_rfv" style="display:none;"></span></td>

我的代码是:

        var iframe11111 = drv.FindElement(By.XPath("/html/body/form/table/tbody/tr/td[3]/div/div[2]/div[2]/iframe"));
        drv.SwitchTo().Frame(iframe11111);
        drv.FindElement(By.XPath("/html/body/form/div[4]/div/div[4]/div[2]/div[2]/div/table/tbody/tr[1]/td[2]")).Click();

        WebDriverWait wait = new WebDriverWait(drv, TimeSpan.FromSeconds(10));
        wait.Until(ExpectedConditions.InvisibilityOfElementLocated(By.XPath("/html/body/form/div[4]/div/div[4]/div[2]/div[2]/div/table/tbody/tr[1]/td[2]/select/option[2]")));

        IWebElement option = drv.FindElement(By.XPath("/html/body/form/div[4]/div/div[4]/div[2]/div[2]/div/table/tbody/tr[1]/td[2]/select/option[2]"));
        drv.FindElement(By.XPath("/html/body/form/div[4]/div/div[4]/div[2]/div[2]/div/table/tbody/tr[1]/td[2]")).Click();
        option.Click();

谁能帮我解决这个问题?

标签: c#selenium-webdriver

解决方案


感谢您的帮助罗加尼克。我用下面的代码做到了。

        var iframe11111 = drv.FindElement(By.XPath("/html/body/form/table/tbody/tr/td[3]/div/div[2]/div[2]/iframe"));
        drv.SwitchTo().Frame(iframe11111);
        drv.FindElement(By.XPath("/html/body/form/div[4]/div/div[4]/div[2]/div[2]/div/table/tbody/tr[1]/td[2]")).Click();
        Thread.Sleep(3000);

        IWebElement Element = drv.FindElement(By.XPath("/html/body/form/div[4]/div/div[4]/div[2]/div[2]/div/table/tbody/tr[1]/td[2]/select"));

        IJavaScriptExecutor js = drv as IJavaScriptExecutor;
        js.ExecuteScript("arguments[0].style='display: block;'", Element);

        Thread.Sleep(3000);

        SelectElement select = new SelectElement(Element);
        select.SelectByValue("32");

推荐阅读