【问题标题】:Selenium: Getting contents of drop-down list without expanding it [duplicate]Selenium:获取下拉列表的内容而不扩展它[重复]
【发布时间】:2020-03-02 22:30:34
【问题描述】:

我正在尝试在页面上的下拉列表中获取元素列表,而不先扩展列表。

我有一段 html,其中创建了一个下拉列表,如下所示:

<est-select id="egenkapitalType0" name="egenkapitalType0" value="Velg type egenkapital…" <div class="select">
   <input type="text" class="select-trigger id="egenkapitalType0-input" placeholder="Velg type egenkapital…">
      <ul role="listbox" id="egenkapitalType0-liste" class="select-liste" aria-hidden="false" ng-transclude="">
         <li id="egenkapitalType0-0" role="option" class="select-valg data-verdi="BANKINNSKUDD_BSU" value="BANKINNSKUDD_BSU">Bankinnskudd/BSU</li>
         <li id="egenkapitalType0-1" role="option" class="select-valg data-verdi="AKSJER" value="AKSJER">Aksjer</li>
      </ul>

(我已经删除了很多不相关的 html 代码,所以这个示例可能缺少一些关闭等)

这可能吗?显示的文本或值?或者对元素的访问是否取决于它们在页面上的可见性和可访问性?

【问题讨论】:

  • 谢谢,但没有。结果也是使用该方法的“”。
  • 我收回了。我能够使用 .getAttribute("innerText") 让它工作!!

标签: selenium


【解决方案1】:

要使用getText() 获取文本,选项需要可见。您可以在隐藏元素上使用getAttribute("innerHTML") 或getAttribute("textContent")。

【讨论】:

  • 是的!正如作为评论发布的链接 Sers 中所建议的那样。谢谢:-)
【解决方案2】:

您可以访问元素,它不依赖于可见性。

List<WebElement> elms = driver.findElements(By.xpath("//ul[@role='listbox']//li");    

现在您有了网络元素列表,例如,您可以获取文本。

List<String> textFromElements = elms.stream().map(el -> el.getText()).collect(Collectors.toList());    

【讨论】:

  • 我只是得到空字符串。但是,如果我先单击该按钮,它就可以工作。但关键是不这样做是否可能。
  • 您应该在点击前检查下拉菜单,我认为如果您不点击它,DOM 中不存在选项。
  • 当我从 chrome 的开发者控制台中复制出 html 块时,包含了 role="option" 属性。另外,如果在点击之前它不存在,它不应该返回“未找到”或NPE吗?
猜你喜欢
  • 2011-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-29
  • 2019-01-26
  • 2013-11-14
  • 1970-01-01
  • 2019-07-15
相关资源
最近更新 更多