0

我在获取正确的 xpath 时遇到问题,我有这个 xml:

<span
 id="X6_5"
 class="FormatTableElementReadonly"
 onblur=" applyToSameControl(this); "
 onclick="handleOnClick(this, event);" 
 onchange="handleOnChange(this, event);" 
 onfocus="handleOnFocus(this, event);" 
 style="" 
 scripttype="text" 
 readonly="readonly" 
 tabindex="" 
 sctype="Text" 
 datatype="string" 
 buttonid="Column4" 
 dvdvar="" 
 ref="var/L.user.array/L.user.array[5]" 
 name="var/L.user.array/L.user.array[5]"
>
 problem
</span>

我的第一个猜测是.//*[@id='X6_5'] 这并没有真正按照我想要的方式工作,因为我可以看到,在 xml 中唯一没有随机创建的是“问题”,所以它给了我这个地方的内容X6_5:-P ...那.//*[@name='problem']本来是我的猜测,但这给了我:

由于以下错误,无法使用 xpath 表达式 .//*[@name, 'problem'] 定位元素:

错误:INVALID_EXPRESSION_ERR:DOM XPath 异常 51(警告:服务器未提供任何堆栈跟踪信息)

很抱歉不是很清楚,第一次使用这个,但感谢大家的尝试。

我要做的是将站点上的值与我在硒中的数组进行比较。例如,我的数组包含“问题、exp、链接器”,在我的网站上有一个应该包含所有这些的列表,但有时会出现问题并且其中一个值丢失。我想检查是否是这种情况。

.//*[@id='X6_5']只是列表中的位置,可以是任何不感兴趣的值。所以我需要看看我是否可以在列表中找到“问题”。我试过像“span [contains'problem']”这样的东西;aso 但没有成功。所有这些都在 iframe 中,但我可以按下.//*[@id='X6_5']但看不到“span”的名称或按下“span[contains'problem']”;。不知道我还能为您提供什么帮助,所以如果缺少某些内容,请直接说出来,我会尽我所能回答。

你们中的任何人都猜想这可以帮助我使用 xpath,也许可以解释这种感觉,我是新人 :-)

4

4 回答 4

1

你的问题不是很清楚。当你说“唯一不是在 xml 中随机创建的东西是‘问题’”时,我不确定你的意思。

也就是说,正如您已经推断出的,选择此特定元素的一个可能的 XPath 是:

//span[@id = 'X6_5']

如果你真的想匹配“问题”(这是这个元素的值),你也可以这样做:

//span[. = 'problem']
于 2013-04-09T15:18:36.533 回答
0

要通过其中的文本匹配元素,您不要使用类似的属性@name,而是使用 text() 函数:

//span[text() = 'Problem']

如果 span 文本中有任何空格导致该操作失败,您可以使用如下normalise-space函数将其剥离:

//span[normalize-space(.) = 'Problem']
于 2013-05-03T10:58:40.883 回答
0

该错误实际上是由于查询本身根本不是有效的 XPath。

.//*[@name, 'problem']

你打算在这里做什么?这是equals, starts with,ends with还是contains搜索?

您可能正在寻找,让该查询工作(工作被定义为不抛出异常,不一定匹配任何元素)是:

//*[@name='problem']

您将需要更多地解释这个问题,因为它根本不清楚。您提供的 HTML 和您的第一个XPath 查询将获得该元素。如果不是,请告诉我们为什么,如何以及它正在做什么。向我解释为什么它不起作用。

于 2013-04-09T15:17:52.440 回答
0

请避免使用前缀在 Xpath 之前。这导致了问题。删除. 然后再试一次。这是 Html 而不是 Xml。

于 2013-04-10T12:30:18.950 回答