def xpath_literal(text): if '"' not in text: return f'"{text}"' if "'" not in text: return f"'{text}'" parts = text.split('"') separator = ', \'"\', ' return 'concat(' + separator.join(f'"{part}"' for part in parts) + ')' def resource_id_xpath(id_string): return f'//*[@resource-id="{id_string}"]' def content_desc_xpath(id_string): return f'//*[@content-desc="{id_string}"]' def text_view_xpath(text): return f'//android.widget.TextView[@text={xpath_literal(text)}]'