Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用selenium xpath或css选择器,如何基于内部元素';s文本或当前元素文本_Css_Selenium_Selenium Webdriver - Fatal编程技术网

使用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')]