我有一个基于 4 个值的动态 xpath,如果我使用 OR 条件,xpath 看起来很大,还有其他方法来处理吗?

问题描述

下面是替换选项变量中给定值的 XPath。

_OPTION_1 = "Average"
_OPTION_2 = "M"
_OPTION_3 = "Casual"
_OPTION_4 = "D"

_WIDTH_VALUE_XPATH = f"//mat-option/span[contains(text(),'{_OPTION_1}')] | //mat-option/span[contains(text(),'{_OPTION_2}')] | //mat-option/span[contains(text(),'{_OPTION_3}')] | //mat-option/span[contains(text(),'{_OPTION_4}')]"

解决方法

虽然您可以使用 or 代替联合运算符 | 来稍微缩短 xpath,但如果目标是 Python 代码的可读性,您可以使用三重引号使字符串更清晰。

_WIDTH_VALUE_XPATH = f'''
//mat-option/span[contains(text(),'{_OPTION_1}')] | 
//mat-option/span[contains(text(),'{_OPTION_2}')] | 
//mat-option/span[contains(text(),'{_OPTION_3}')] | 
//mat-option/span[contains(text(),'{_OPTION_4}')]
'''

,

为什么不是列表/列表理解?

options=["Average","M","Casual","D"]
xpath_list = [f"//mat-option/span[contains(text(),'{option}')]" for option in options]

这意味着无论您当前使用 _WIDTH_VALUE_XPATH 做什么,您都必须替换对 xpath_list 的检查。

例如if target_xpath in xpath_list...