Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.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
Html XPath包含2个或多个;或;条件不起作用?_Html_Xml_Xpath_Anchor_Web Testing - Fatal编程技术网

Html XPath包含2个或多个;或;条件不起作用?

Html XPath包含2个或多个;或;条件不起作用?,html,xml,xpath,anchor,web-testing,Html,Xml,Xpath,Anchor,Web Testing,有一个锚标记,其值可由用户更改。现在,我想编写一个Xpath查询,在一条语句中搜索多个链接文本名称 <a href="#login" class="fancybox" xpath="1">Signin</a> 然后它失败了。我需要使用Selenium单击此元素 请提供帮助。XPath基于序列。因此,您可以使用逗号分隔的列表,即序列,来模拟逻辑OR条件 XPath //a[text()=("Login&

有一个锚标记,其值可由用户更改。现在,我想编写一个Xpath查询,在一条语句中搜索多个链接文本名称

<a href="#login" class="fancybox" xpath="1">Signin</a>
然后它失败了。我需要使用Selenium单击此元素


请提供帮助。

XPath基于序列。因此,您可以使用逗号分隔的列表,即序列,来模拟逻辑OR条件

XPath

//a[text()=("Login","Log-in","Click here to login")]

重要注意事项:

  • 仅在需要子字符串测试时使用
    contains()
    。看
  • 理解:见
  • 注意空格的变化。看
  • 您发布的标记具有
    Signin
    ,但您的XPath没有
  • 注意区分大小写:
    单击此处登录
    单击此处登录
    不同
XPath 1.0 如果您确定没有空格变化:

//a[.='Login' or .='Log-in' or .='Click here to login' or .='Login now']
否则:

//a[   normalize-space()='Login" 
    or normalize-space()='Log-in' 
    or normalize-space()='Click here to login' 
    or normalize-space()='Login now']
XPath2.0
你能这样试一下吗:用。Xpath(//a[@class='fancybox']),然后单击此元素。您的代码看起来很好。我不知道问题出在哪里,但是您的XPath表达式看起来非常好。我不会这样写(例如,如果文本包含'Login now',那么它也包含'Login',因此其中一个条件是多余的);但这并不能解释它失败的原因。OP使用的是Selenium,所以他坚持使用过时的XPath1.0语法。此构造需要XPath2.0或更高版本。您好,kjhughes,谢谢您的详细回答。我不知道我们可以在XPath或XPath条件中使用逗号分隔的值。那么,XPath表达式中可以使用的“或”、“和”的数量是否有限制。我可以为“或”写10-15个或更多的条件吗?注意
x=('a','b','c')
构造需要XPath 2.0或更高版本。关于
的最大操作数,理论上没有限制。任何给定的实现都可能有一个限制,但10-15应该可以。
//a[   normalize-space()='Login" 
    or normalize-space()='Log-in' 
    or normalize-space()='Click here to login' 
    or normalize-space()='Login now']
//a[normalize-space()=('Login','Log-in','Click here to login','Login now')]