如何在Selenium RC中通过xpath访问非第一个匹配项?

0 投票
1 回答
730 浏览
提问于 2025-04-15 23:54

我页面上有20个标签:

In [85]: sel.get_xpath_count("//label")
Out[85]: u'20'

默认情况下,我可以获取第一个标签:

In [86]: sel.get_text("xpath=//label")
Out[86]: u'First label:'

但是,与我找到的xpath文档不同,我在尝试使用xpath获取第二个标签的文本时遇到了错误:

In [87]: sel.get_text("xpath=//label[2]")
ERROR: An unexpected error occurred while tokenizing input
The following traceback may be corrupted or invalid
The error message is: ('EOF in multi-line statement', (216, 0))

ERROR: An unexpected error occurred while tokenizing input
The following traceback may be corrupted or invalid
The error message is: ('EOF in multi-line statement', (1186, 0))

---------------------------------------------------------------------------
Exception                                 Traceback (most recent call last)

/Users/me/<ipython console> in <module>()

/Users/me/selenium.pyc in get_text(self, locator)
   1187         'locator' is an element locator
   1188         """
-> 1189         return self.get_string("getText", [locator,])
   1190 
   1191 

/Users/me/selenium.pyc in get_string(self, verb, args)
    217 
    218     def get_string(self, verb, args):
--> 219         result = self.do_command(verb, args)
    220         return result[3:]
    221 

/Users/me/selenium.pyc in do_command(self, verb, args)
    213         #print "Selenium Result: " + repr(data) + "\n\n"

    214         if (not data.startswith('OK')):
--> 215             raise Exception, data
    216         return data
    217 

Exception: ERROR: Element xpath=//label[2] not found

这是怎么回事呢?

1 个回答

2

使用:

(//label)[2]

你现在使用的XPath表达式是:

//label[2]

这意味着:

选择文档中每个label元素,这些label是它们父元素的第二个label子元素。很可能文档中的每个label都是它们父元素的第一个也是唯一的label子元素。在这种情况下,上面的表达式将不会选择任何东西。

撰写回答