使用XPath查找当前选择的<option>

Mar*_*ery 13 xpath dom

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

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

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

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

(如果重要的话,我已经尝试过使用$xChrome开发者控制台中的功能,并使用find_elements_by_xpathSelenium for Python中的方法.)

Mar*_*ery 17

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

更长的答案:XPath可以查看HTML属性,但它不能查看DOM属性.选择<option>一个元素<select>改变了selected 性质<option>true,而且也改变了value其父的财产<select>元素,但它不会影响任何属性,所以它是不可见的XPath的.

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

其他 的答案 在这里 声称,像一个选择器//option[@selected]可以检测到页面加载后由用户做出选择的变化仅仅是完全错误的.

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


23i*_*use 5

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

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

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

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

  • 它根本不起作用。`//select/option[@selected='selected']` 不会匹配当前选中的选项;它将匹配任何将 `selected` 属性设置为字符串 `"selected"` 的选项。这甚至不能保证是*初始*选择的选项(因为仅仅*存在*`selected`属性将`option`标记为初始选择;它的值是什么并不重要),更不用说当前选择的一个(因为*当前*选择哪个选项完全独立于`selected`属性的存在或值)。 (3认同)