SeleniumSelectElement用于下拉菜单-元素不可交互:元素当前不可见,可能无法操作



这应该是一个非常简单的解决方案,但却变得一团糟。刚刚进行了一次大的角度升级(angular 8(,由于某种原因,现在没有任何下拉菜单可供选择。我过去只能做一个SendKeys(Keys.Down(,然后迭代所有选项,直到找到我的选项,但这已经不起作用了。

经过一番搜索,我找到了SelectElement方法。下面是我的实现。

SelectElement dropdownSelect = new SelectElement(chromeDriver.FindElement(By.CssSelector("select[aria-describedby='myfield']")));
dropdownSelect.SelectByValue("option1");

html看起来像这个

<select _ngcontent-teu-c24="" aria-describedby="myfield">
<option _ngcontent-teu-c24="" disabled="" value="" ng-reflect-value="">Select</option>
<option _ngcontent-teu-c24="" value="option1" ng-reflect-value="option1" class="ng-star-inserted">option1</option>
<option _ngcontent-teu-c24="" value="option2" ng-reflect-value="option2" class="ng-star-inserted">option2</option>
</select>

每当我尝试执行此代码时,我都会收到以下错误:"元素不可交互:元素当前不可见,可能无法操作">

它总是在页面上可见,并且可以点击。我在这里为如何解决这个问题而挠头

您可以尝试先单击下拉列表,然后单击所需选项。

chromeDriver.FindElement(By.CssSelector("select[aria-describedby='myfield']")).Click();
chromeDriver.FindElement(By.Xpath("option[@value='option1']")).Click();

您需要等待元素可点击。很可能JavaScript正在做一些事情,硒的移动速度比JavaScript的执行速度快。

var wait = new WebDriverWait(driver, 10);
wait.Until(d => ExpectedConditions.ElementIsClickable(By.CssSelector("select[aria-describedby='myfield']")));
dropdownSelect.SelectByValue("option1")

最新更新