明确 选择同胞的唯一选择是preceding-sibling
和following-sibling
吗?
标记的简化版本
<ui-view>
<descendant> <!-- 1 -->
<descendant> <!-- 2 -->
<descendant> <!-- 3 -->
<descendant> <!-- 4 -->
<descendant> <!-- 5 -->
<sibling>
<child></child> <!-- comments_author -->
<child></child> <!-- comments_timestamp -->
</sibling>
<sibling></sibling> <!-- comment (in comments_comment) -->
脚本
# 1. Select All Comment Threads
comments_threads = browser.find_elements_by_xpath('//ui-view//div[@class="commentLayout"]')
for thread in comments_threads:
# 2. Select All Comments in Each Thread
comments_comment = comments_threads.find_elements_by_xpath('./div[contains(@class, "commentLayout-text")]')
for comment in comments_comment:
# 3. Select Author of Each Comment
# comments_author = comments_threads.find_element_by_xpath('./*[contains(@class, "commentLayout-account")]')
# 4. Select Timestamp of Each Comment
# comments_timestamp = comments_threads.find_element_by_xpath('./span[contains(@class, "commentNote")]')
问题是必须相对于嵌套循环的每个3
项目选择4
和comment
,我希望我的代码尽可能地灵活。
选择任何与所需节点匹配的同级对象比使用preceding-sibling
匹配所需节点要灵活得多。
一种解决方案是选择父节点,然后选择与特定条件匹配的任何子节点,但是,如果可能的话,使用任何同级作为选择器肯定会更加灵活甚至效率更高。
是否不可能选择 所有 个兄弟姐妹?
答案 0 :(得分:1)
使用下面的选择器:
//“您的div” [position()= 1],只需根据需要更改为任何位置。
我只是想提出一个主意,但不知道这对您是否有帮助。
请查看此帖子,以获取有关xpath中位置的进一步说明:
http:// seleniumone-by-arun。 blogspot.com/2013/04/64-position-xpath-function.html
答案 1 :(得分:1)
我认为这将为“ thisnode”选择所有同级:
.got.plt
/ ..表示选择父级(上一级)
/ *表示选择每个孩子(向下一级)
答案 2 :(得分:0)
在XPath中没有合并的siblings
轴-仅preceding-sibling
或following-sibling
。
通常可以通过元素父级的子级上的条件来实现与兄弟元素有关的任何目标。详细信息将针对目标标记中的不变量。当排序在同级中很重要时,请使用preceding-sibling
和following-sibling
轴;否则,请在父元素的子元素上写条件。