什么是正确的XPath语法来检查是否 option
元素是 目前 选中,或只是为了获得所选 option
来自的元素 select
元素,在用户和JavaScript可能与之交互的打开页面上?这甚至可以用于XPath,还是缺乏查看DOM属性的能力?
我找不到任何关于此的文档,并且(推测性地)尝试过:
//option[@selected=true]
//option[@selected="selected"]
//option[@selected]
但这些都不起作用;他们根本不匹配任何元素。
(如果重要的话,我已经尝试了这两个使用 $x
功能在Chrome开发者控制台中,并使用 find_elements_by_xpath
Selenium for Python中的方法。)
简短的回答:这是不可能的。
更长的答案:XPath可以查看HTML属性,但它无法查看DOM属性。选择一个 <option>
中的元素 <select>
改变了 selected
属性 的 <option>
至 true
,也改变了 value
其母公司的财产 <select>
element,但它不影响任何一个的属性,因此它对XPath是不可见的。
找到 <option>
有元素的元素 selected
属性集,通常是页面作者如何确定最初选择哪个选项,您可以使用 //option[@selected]
。但是这个 才不是 找出 目前 选 <option>
;用户对选择所做的更改对XPath是不可见的。不能保证它甚至会找到 原来 选择的选项,因为页面作者可能没有放入 selected
属性 任何 元素,或者让浏览器默认选择第一个选项,或者让一些JavaScript通过选择初始选项 selected
属性。
多重 其他 答案 这里 自称 那个选择器就像 //option[@selected]
可以在页面加载完全错误后检测用户所做的选择更改。
当然,如果你能够使用 CSS 那么选择器而不是XPath选择器 option:checked
会做的。
问题可能是 "
(双引号)。
//select/option[@selected='selected']
- 将匹配所选的选项,我正在成功使用它。
//select/option[@selected='selected' and @value='specific value']
- 如果它具有“特定值”,则仅匹配所选选项,我也使用此选项。
如果你仍然遇到麻烦,那可能是一个完全不同的问题,也许没有选项节点。我希望这有帮助。
简短的回答:这是不可能的。
更长的答案:XPath可以查看HTML属性,但它无法查看DOM属性。选择一个 <option>
中的元素 <select>
改变了 selected
属性 的 <option>
至 true
,也改变了 value
其母公司的财产 <select>
element,但它不影响任何一个的属性,因此它对XPath是不可见的。
找到 <option>
有元素的元素 selected
属性集,通常是页面作者如何确定最初选择哪个选项,您可以使用 //option[@selected]
。但是这个 才不是 找出 目前 选 <option>
;用户对选择所做的更改对XPath是不可见的。不能保证它甚至会找到 原来 选择的选项,因为页面作者可能没有放入 selected
属性 任何 元素,或者让浏览器默认选择第一个选项,或者让一些JavaScript通过选择初始选项 selected
属性。
多重 其他 答案 这里 自称 那个选择器就像 //option[@selected]
可以在页面加载完全错误后检测用户所做的选择更改。
当然,如果你能够使用 CSS 那么选择器而不是XPath选择器 option:checked
会做的。
问题可能是 "
(双引号)。
//select/option[@selected='selected']
- 将匹配所选的选项,我正在成功使用它。
//select/option[@selected='selected' and @value='specific value']
- 如果它具有“特定值”,则仅匹配所选选项,我也使用此选项。
如果你仍然遇到麻烦,那可能是一个完全不同的问题,也许没有选项节点。我希望这有帮助。
我想我们可以使用来自@Mark的答案和帐户的知识。让我们找到一个HAS所需属性的节点:
tree.xpath('//select/option[@selected]/text()')[0].strip()
我会尝试 //option[@selected='true']
即 driver.findElements(By.xpath("//option[@selected='true']")).getText();