14

什么是正确的 XPath 语法来检查当前option是否选择了一个元素,或者只是从一个元素中获取所选元素,在用户和 JavaScript 可能已经交互的打开页面上?这甚至可以使用 XPath,还是它缺乏查看 DOM 属性的能力?optionselect

我找不到任何关于此的文档,并且(推测性地)尝试过:

  • //option[@selected=true]
  • //option[@selected="selected"]
  • //option[@selected]

但这些都不起作用;它们根本不匹配任何元素。

(以防万一,我已经尝试过使用$xChrome 开发者控制台中的函数,以及使用find_elements_by_xpathSelenium for Python 中的方法。)

4

5 回答 5

24

简短的回答:这是不可能的。

更长的答案:XPath 可以查看 HTML 属性,但不能查看 DOM 属性。选择 a 中的<option>元素<select>会更改to的selected 属性,也会更改其父元素的属性,但不会影响两者的属性,因此对 XPath 是不可见的。<option>truevalue<select>

要查找<option>具有selected属性集的元素(通常是页面作者确定最初选择哪个选项的方式),您可以使用//option[@selected]. 但这并没有找到当前选中的<option>;用户对选择所做的更改对 XPath 是不可见的。不能保证它甚至会找到最初选择的选项,因为页面作者可能没有将selected属性放在任何元素上,而是让浏览器默认选择第一个选项,或者让一些 JavaScript 通过selected 属性选择初始选项.

这里的多个其他 答案 声称选择器之类的可以检测到用户在页面加载后所做的选择更改是完全错误的。 //option[@selected]

当然,如果您能够使用CSS选择器而不是 XPath 选择器,那么option:checked就可以完成这项工作。

于 2013-08-01T08:10:09.083 回答
5

问题可能是"(双引号)。

//select/option[@selected='selected']- 将匹配所选选项,我正在成功使用它。

//select/option[@selected='selected' and @value='specific value']- 只有当它具有“特定值”时才会匹配选定的选项,我也在使用它。

如果您仍然遇到问题,这可能是一个完全不同的问题,也许没有选项节点。我希望这有帮助。

于 2013-08-01T11:13:08.313 回答
0

我认为我们可以使用@Mark 回答中的知识并加以说明。让我们找到一个具有所需属性的节点:

tree.xpath('//select/option[@selected]/text()')[0].strip()
于 2014-12-24T20:57:17.060 回答
-1

我尝试了"//option[@selected='']并且它对我有用。它能够突出显示页面对象模型中的选定选项。

于 2021-09-02T12:37:09.683 回答
-2

我会尝试//option[@selected='true']

IEdriver.findElements(By.xpath("//option[@selected='true']")).getText();

于 2013-04-02T16:29:38.097 回答