【问题标题】:Using selenium xpath or css selectors, how to get a element based on inner element's text or current elements text使用 selenium xpath 或 css 选择器,如何根据内部元素的文本或当前元素的文本获取元素
【发布时间】:2018-01-06 00:53:38
【问题描述】:

接下来,

<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 的文本(INTEGER 更改)选择跨度(id=dynamic23)。

我可以像下面这样写 //*[@id='section2']//span/bdi[contains(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 选择器是否有更好的选择?

【问题讨论】:

    标签: css selenium selenium-webdriver


    【解决方案1】:

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

    【讨论】:

    • 我认为问题在于您在 XPath 中插入了“INTEGER”,但每次都会改变。您需要调整答案以解决此问题。一种方法是删除“显示整数”部分并​​留下“更多细节”。 OP 必须对其进行测试,看看它是否有效,但它可能会。
    【解决方案2】:

    您可以使用 UNION 运算符|。请参阅下面的示例。

    //*[@id='section2']//span/bdi[contains(text(),'more fields')]/ancestor::button") | //*[@id='section2']//span[contains(text(),'more details')]/ancestor::button")
    

    【讨论】:

      【解决方案3】:

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

      //button[@id='dynmaicBtnxx']//*[contains(.,'show INTEGER more details')]//preceding::span[1]
      

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

      【讨论】:

        【解决方案4】:

        这可能会有所帮助:

        .//*[contains(., 'show INTEGER more details')]/ancestor::button[starts-with(@id,'dynmaicBtn')]
        

        开头的*(星号)将选择带有所需文本的标签,无论是span 还是bdi。 Ancestor 将选择一个按钮,其 id 为 starts-with 您的文本,然后更改 int's

        【讨论】:

          猜你喜欢
          • 2016-08-26
          • 2017-02-24
          • 1970-01-01
          • 2012-12-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-14
          • 2021-01-10
          • 1970-01-01
          相关资源
          最近更新 更多