在以下内容中,
<section id="section2" class="MightChange1 MightChange2">
<div id="dynamicIdxxx" class="dynamic1 dynamic2 dynamic3">
<div id="againDynamic" ..>
<div id="someDynamicCanBeRelayed" class="xyz">
<button id="dynmaicBtnxx" class="Cannot be relayed">
<span ....>
<span id="dynamic23" class="PartOfDoesntChange">
<bdi> show INTEGER more details</bdi>如何使用bdi的文本选择跨度(使用id=dynamic23) (整数会发生变化)。
我可以这样写//*@id=‘section2’//span/bdicontain(text(),'more fields')/ancestor::button")
挑战是,有时在下面
<span id="dynamic23" class="PartOfDoesntChange">
<bdi> show INTEGER more details</bdi>将更改为(不带bdi标记)
<span id="dynamic23" class="PartOfDoesntChange"> show INTEGER more details <span>要处理的一种选择是,我可以使用selenium OR条件使用两个带有和不带有bdi的xpath。无论哪种方式,我都会得到结果并使用该元素。
对于这样的场景或使用css选择器,有没有更好的替代方案?
发布于 2018-01-06 14:40:40
尝试这个简单的//span[contains(., 'show INTEGER more details')],不要替换。转换为text(),否则它将只匹配一个元素

发布于 2018-01-06 09:27:11
您可以使用联合运算符|。请参见下面的示例。
//*[@id='section2']//span/bdi[contains(text(),'more fields')]/ancestor::button") | //*[@id='section2']//span[contains(text(),'more details')]/ancestor::button")发布于 2018-01-06 15:17:36
要使用文本show INTEGER more details选择span元素,可以使用以下xpath:
//button[@id='dynmaicBtnxx']//*[contains(.,'show INTEGER more details')]//preceding::span[1]:似乎值是动态的,因此您可能还必须为元素引入
WebDriverWait。
https://stackoverflow.com/questions/48123265
复制相似问题