首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为div和span (最好是xpath)之间的文本编写定位器,其中包含非中断空间(&nbsp)。

如何为div和span (最好是xpath)之间的文本编写定位器,其中包含非中断空间(&nbsp)。
EN

Stack Overflow用户
提问于 2018-08-07 05:26:44
回答 2查看 481关注 0票数 2

我想为以下div编写xpath

代码语言:javascript
复制
<div class='someclass' id='someid'>:TEST&nbsp;SELENIUM&nbsp;1234<div>

请注意:

  1. 标记可以是任何东西,如div、span或锚标记。
  2. &nbsp;可以出现在文本的任何地方。

到目前为止,我所做的尝试了

代码语言:javascript
复制
//div[contains(text(),":TEST SELENIUM 1234")]

//div[contains(text(),":TEST{&nbsp;}SELENIUM{&nbsp;}1234")] 

//div[contains(text(),":TEST&nbsp;SELENIUM&nbsp;1234")] 

//div[normalize-space(text()) = ':TEST SELENIUM 1234']

//div[normalize-space(text()) = ':TEST{&nbsp;}SELENIUM{&nbsp;}1234']

//div[normalize-space(text()) = ':TEST&nbsp;SELENIUM&nbsp;1234']

//div[normalize-space(.) = ':TEST SELENIUM 1234']  

//div[normalize-space(.) = ':TEST{&nbsp;}SELENIUM{&nbsp;}1234']  

//div[normalize-space(.) = ':TEST&nbsp;SELENIUM&nbsp;1234']  

//div[normalize-space(.) = ':TEST{\u00a0}SELENIUM{\u00a0}1234']  

//div[normalize-space(.) = ':TEST${nbsp}SELENIUM${nbsp}1234']  

对我有用的东西(感谢@Andersson)

代码语言:javascript
复制
//div[starts-with(text(), ":TEST") and substring(text(), 7)="SELENIUM" and  substring(text(), 16)="1234"]  

这是一项更多的工作,并将只适用于已知的字符串。

以下是我已跟进的职位:

Link1

Link2

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2018-08-07 06:18:18

根据上面的对话,您可以使用这个示例xPath生成器(JAVA):

代码语言:javascript
复制
public class Test {
    public static void main(String[] args) {
        String s = ":TEST&nbsp;SELENIUM&nbsp;1234";
        String[] parts = s.split("&nbsp;");
        StringBuilder xpath = new StringBuilder("//*");

        for (int i = 0; i < parts.length; i++){
            xpath.append((i == 0) ? "[contains(text(), '" + parts[i] + "')" : " and contains(text(), '" + parts[i] + "')");
        }
        xpath.append("]");

        System.out.println(xpath);
    }
}

输出:

代码语言:javascript
复制
//*[contains(text(), ':TEST') and contains(text(), 'SELENIUM') and contains(text(), '1234')]
票数 1
EN

Stack Overflow用户

发布于 2018-08-07 08:23:01

在Python里我会做

代码语言:javascript
复制
required_div = [div for div in driver.find_elements_by_xpath('//div') if div.text == ':TEST SELENIUM 1234'][0] 

若要通过其完整的文本内容查找所需的节点,请忽略不间断的空格字符。

再说一次,这只是一个解决办法,但它似乎是相当简单的解决方案

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

https://stackoverflow.com/questions/51719379

复制
相关文章

相似问题

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