页面刷新后XPath变动,如何稳定定位class为kbkey button red_selected sel的元素

问题根因
你之前使用的是基于元素层级索引的XPath,依赖目标元素在父容器virtualKeysWrapper下的固定排序,页面刷新后元素渲染顺序调整就会定位失败。你可以直接利用目标元素自带的class属性进行定位,完全不依赖元素排序。
解决方案
方案1:使用优化后的XPath定位
分别匹配目标元素的多个class值,避免class属性值内空格顺序变化导致匹配失败,代码如下:
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="virtualKeysWrapper"]//*[contains(@class,"kbkey") and contains(@class,"button") and contains(@class,"red_selected") and contains(@class,"sel")]'))).click()
方案2:使用CSS选择器定位(更推荐)
CSS选择器对多class匹配的语法更简洁,执行性能也优于XPath,代码如下:
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#virtualKeysWrapper .kbkey.button.red_selected.sel'))).click()
补充提示
如果页面中存在多个符合该class组合的元素,你可以额外叠加元素的文本内容、自定义属性(如data-*)等条件进一步缩小定位范围,确保定位到唯一目标元素。
内容的提问来源于stack exchange,提问作者hbae
相关产品推荐
相关产品推荐

