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

时间:2013-04-02 16:26:07

标签: dom xpath

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

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

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

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

(如果重要的话,我已经尝试使用Chrome开发者控制台中的$x功能,并使用Selenium for Python中的find_elements_by_xpath方法。)

4 个答案:

答案 0 :(得分:16)

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

更长的答案:XPath可以查看HTML属性,但它无法查看DOM属性。选择<option>中的<select>元素会将selected的{​​{1}} 属性更改为<option>,同时也会更改true它的父value元素的属性,但它不影响任何一个的属性,因此它对XPath是不可见的。

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

多个other answers here claimingselected之类的选择器可以检测到用户在页面加载后所做的选择更改完全错误

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

答案 1 :(得分:2)

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

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

//select/option[@selected='selected' and @value='specific value'] - 如果它具有“特定值”,则仅匹配所选选项,我也使用此选项。

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

答案 2 :(得分:0)

我认为我们可以使用来自@Mark的答案和帐户的知识。让我们找到一个HAS所需属性的节点:

tree.xpath('//select/option[@selected]/text()')[0].strip()

答案 3 :(得分:-2)

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

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