【问题标题】:Element <option> could not be scrolled into view C# Selenium元素 <option> 无法滚动到视图 C# Selenium
【发布时间】:2019-08-14 10:04:52
【问题描述】:

我正在尝试从下拉列表中选择选项,但它返回错误:OpenQA.Selenium.ElementNotInteractableException: Element could not be scrolled into view.

选择表单如下所示:

<div ...>
  <dd id="names-element">
    <select name="names", id="names", tabindex="-1", style="display: none">
      <option value="Ann">Ann</option>
      <option value="Jon">Jon</option>
      <option value="Mike">Mike</option>
      <option value="Lisa">Lisa</option>
    </select>
  </dd>
</div>

我的代码:

IWebElement namesElement = driver.FindElement(By.Id("names"));
SelectElement namesSelect = new SelectElement(namesElement );
namesSelect.SelectByValue("Jon");

我尝试过使用 webwait likes:

WebDriverWait wait = new WebDriverWait(driver, new TimeSpan(0, 0, 10));
wait.Until(ExpectedConditions.ElementToBeClickable(namesElement));

但此时它返回: OpenQA.Selenium.WebDriverTimeoutException: 10 秒后超时

然后我尝试使用 javascript 执行器:

IJavaScriptExecutor je = (IJavaScriptExecutor)driver;
je.ExecuteScript("arguments[0].click();", namesElement);

但之后它再次返回: OpenQA.Selenium.ElementNotInteractableException:元素无法滚动到视图中。

我实际上是 Selenium 的新手,更喜欢 python,但此时需要使用 C#。谁能帮帮我?

【问题讨论】:

  • style="display: none" 是为什么。它不可见。您要么必须在页面上执行某些操作以使其可见,要么在您使用桌面等时可能适用于移动设备。

标签: c# selenium-webdriver


【解决方案1】:

尝试使用 javascript 滚动到该元素,例如:

IWebElement namesElement = driver.FindElement(By.Id("names"));
driver.ExecuteScript("arguments[0].scrollIntoView(true);", namesElement);
SelectElement namesSelect = new SelectElement(namesElement );
namesSelect.SelectByValue("Jon");

【讨论】:

  • 感谢您的回答,但没有奏效。它再次引发:OpenQA.Selenium.ElementNotInteractableException:元素无法滚动到视图中。我认为它会引发错误,因为 display 不是 select 元素的样式。
  • 在您的 namesSelect 上尝试 getOptions() 方法,如果它返回您的 web 元素,那么我们确定该元素已被识别。如果不尝试使用 xpath 更改您的元素标识,例如: //dd[@id='names-element']/select[@id='names'] 然后单击 dropdown-namesElement.click(),然后选择值使用 selectByValue()。另外,看看下拉菜单附近是否有任何按钮?您可以单击下拉菜单本身吗?如果是,请检查显示属性是否更改。如果它确实更改为“阻止”或类似的东西,需要在找到选项之前单击下拉元素。
【解决方案2】:

style="display: none" 表示该元素在网页上不可见。 确保这是一个唯一标识符。有时,DOM 中有多个元素具有完全相同的标识符,但唯一的区别是 stype="dispay: block"

确定标识符绝对正确后,您可以使用SelectElement 类按值选择元素。

【讨论】:

  • 感谢您的回答。我已经使用位于 select 元素下的 div 元素解决了这个问题,单击到 names-element 然后在 div 中通过 xpath 查找 span 元素。
猜你喜欢
  • 1970-01-01
  • 2019-03-25
  • 2018-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-28
  • 2016-11-01
相关资源
最近更新 更多