首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用selenium xpath或css选择器,如何根据内部元素文本或当前元素文本获取元素

使用selenium xpath或css选择器,如何根据内部元素文本或当前元素文本获取元素
EN

Stack Overflow用户
提问于 2018-01-06 08:53:38
回答 4查看 617关注 0票数 1

在以下内容中,

代码语言:javascript
复制
<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")

挑战是,有时在下面

代码语言:javascript
复制
<span id="dynamic23" class="PartOfDoesntChange">
     <bdi> show INTEGER more details</bdi>

将更改为(不带bdi标记)

代码语言:javascript
复制
<span id="dynamic23" class="PartOfDoesntChange"> show INTEGER more details <span>

要处理的一种选择是,我可以使用selenium OR条件使用两个带有和不带有bdi的xpath。无论哪种方式,我都会得到结果并使用该元素。

对于这样的场景或使用css选择器,有没有更好的替代方案?

EN

回答 4

Stack Overflow用户

发布于 2018-01-06 14:40:40

尝试这个简单的//span[contains(., 'show INTEGER more details')],不要替换。转换为text(),否则它将只匹配一个元素

票数 1
EN

Stack Overflow用户

发布于 2018-01-06 09:27:11

您可以使用联合运算符|。请参见下面的示例。

代码语言:javascript
复制
//*[@id='section2']//span/bdi[contains(text(),'more fields')]/ancestor::button") | //*[@id='section2']//span[contains(text(),'more details')]/ancestor::button")
票数 0
EN

Stack Overflow用户

发布于 2018-01-06 15:17:36

要使用文本show INTEGER more details选择span元素,可以使用以下xpath

代码语言:javascript
复制
//button[@id='dynmaicBtnxx']//*[contains(.,'show INTEGER more details')]//preceding::span[1]

:似乎值是动态的,因此您可能还必须为元素引入WebDriverWait

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48123265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档