代码之家  ›  专栏  ›  技术社区  ›  cruisepandey

如何为div和span(最好是xpath)之间包含不间断空格的文本编写定位器(nbsp)

  •  3
  • cruisepandey  · 技术社区  · 8 年前

    我想写 xpath语言 对于以下部门:

    <div class='someclass' id='someid'>:TEST&nbsp;SELENIUM&nbsp;1234<div>
    

    请注意:

    1. 标签 可以是任何内容,如div、SPAN或Anchor标记。
    2. &nbsp; 可以出现在文本的任何地方。

    我所拥有的 尝试 目前为止:

    //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)

    //div[starts-with(text(), ":TEST") and substring(text(), 7)="SELENIUM" and  substring(text(), 16)="1234"]  
    

    这更多的是一种变通方法,只适用于已知的字符串。

    以下是我已经关注过的SO帖子:

    Link1
    Link2

    如有任何帮助,将不胜感激。

    2 回复  |  直到 8 年前
        1
  •  1
  •   Andrei Suvorkov    8 年前

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

    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);
        }
    }
    

    输出:

    //*[contains(text(), ':TEST') and contains(text(), 'SELENIUM') and contains(text(), '1234')]
    
        2
  •  1
  •   Andersson    8 年前

    我会用python

    required_div = [div for div in driver.find_elements_by_xpath('//div') if div.text == ':TEST SELENIUM 1234'][0] 
    

    根据完整的文本内容查找所需的节点,忽略不间断的空格字符

    再次强调,这只是一个解决办法,但似乎是一个非常简单的解决方案