使用selenium xpath或css选择器,如何基于内部元素';s文本或当前元素文本
下面,使用selenium xpath或css选择器,如何基于内部元素';s文本或当前元素文本,css,selenium,selenium-webdriver,Css,Selenium,Selenium Webdriver,下面, <section id="section2" class="MightChange1 MightChange2"> <div id="dynamicIdxxx" class="dynamic1 dynamic2 dynamic3"> <div id="againDynamic" ..> <div id="someDynamicCanBeRelayed" class="xyz"> <b
<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/bdi[contains(text(),'more fields')]/concenter::button”)
挑战是,有时是在下面
<span id="dynamic23" class="PartOfDoesntChange">
<bdi> show INTEGER more details</bdi>
显示更多详细信息
将更改为(不带bdi标签)
显示整数更多详细信息
要处理的一个选项是,我可以使用两个xpath,使用selenium或conditions时使用bdi,也可以不使用bdi
对于这种情况,或者使用css选择器,是否有更好的替代方案?您可以使用UNION运算符
。请参见下面的示例
//*[@id='section2']//span/bdi[contains(text(),'more fields')]/ancestor::button") | //*[@id='section2']//span[contains(text(),'more details')]/ancestor::button")
试试这个简单的
//span[contains(,'show INTEGER more details')]
,不要替换.to text(),否则它将只匹配一个元素
要使用文本选择span元素
显示整数更多详细信息
可以使用以下xpath
:
//button[@id='dynmaicBtnxx']//*[contains(.,'show INTEGER more details')]//preceding::span[1]
注意:值似乎是动态的,因此您可能还必须为元素引入WebDriverWait
这可能有助于:
.//*[contains(., 'show INTEGER more details')]/ancestor::button[starts-with(@id,'dynmaicBtn')]
开始处的*(星形)将选择带有您所需文本的标记,无论是
span
还是bdi
。祖先将选择一个按钮,其id以您的文本开始,然后更改int的我想问题在于您插入了“INTEGER”“但每次都会改变。你需要调整你的答案来解释这一点。一种方法是删除“show INTEGER”部分,留下“more details”。OP必须测试它,看看它是否有效,但很可能会。
.//*[contains(., 'show INTEGER more details')]/ancestor::button[starts-with(@id,'dynmaicBtn')]