2

我开始使用 SST(硒简单测试),但在执行似乎是有效的 xpath 表达式时遇到了问题'//div[div@data-type="folder-name"]'。SST 失败并出现以下回溯:

Traceback (most recent call last):

File "/usr/local/lib/python2.7/dist-packages/sst/cases.py", line 207, in run_test_script exec self.code in self.context
File "./sst-one.py", line 7, in <module> names = get_elements_by_xpath('//div[div@data-type="folder-name"]')
File "/usr/local/lib/python2.7/dist-packages/sst/actions.py", line 1344, in >get_elements_by_xpath_raise(msg)
File "/usr/local/lib/python2.7/dist-packages/sst/actions.py", line 118, in _raise raise AssertionError(msg)
AssertionError: Element not found: Message: u'The given selector //div[div@data->type="folder-name"] is either invalid or does not result in a WebElement. The following >error occurred:\nInvalidSelectorError: Unable to locate an element with the xpath >expression //div[div@data-type="folder-name"] because of the following >error:\n[Exception... "The expression is not a legal expression."  code: "12" nsresult: >"0x805b0033 (SyntaxError)"  location: "file:///tmp/tmp12zCta/extensions/fxdriver@googlecode.com/components/driver_component.js> Line: 5916"]' ;
Stacktrace: 
    at FirefoxDriver.annotateInvalidSelectorError_ (file:///tmp/tmp12zCta/extensions/fxdriver@googlecode.com/components/driver_component.js:8873)
    at FirefoxDriver.prototype.findElementsInternal_ (file:///tmp/tmp12zCta/extensions/fxdriver@googlecode.com/components/driver_component.js:8931)
    at FirefoxDriver.prototype.findElements file:///tmp/tmp12zCta/extensions/fxdriver@googlecode.com/components/driver_component.js:8935)
    at DelayedCommand.prototype.executeInternal_/h file:///tmp/tmp12zCta/extensions/fxdriver@googlecode.com/components/command_processor.js:10840)
    at DelayedCommand.prototype.executeInternal_ (file:///tmp/tmp12zCta/extensions/fxdriver@googlecode.com/components/command_processor.js:10845)
    at DelayedCommand.prototype.execute/< file:///tmp/tmp12zCta/extensions/fxdriver@googlecode.com/components/command_processor.js:10787)

SST 代码行是:

names = get_elements_by_xpath('//div[div@data-type="folder-name"]')

如果我使用 selenium(来自 python)而不是 SST 运行相同的 xpath 语句,它是一个有效的表达式并返回匹配的元素(如果有)。

纯 selenium 代码行(其中 br 是 firefox webdriver 对象)是:

elems = br.find_elements_by_xpath("//div[div/@data-type='folder-name']")

我知道这有点杂草,所以如果有人对如何调试 selenium 在 /tmp 目录中创建的 .js 代码有一些提示,那将是一个很大的帮助。

4

3 回答 3

1

它不是有效的 XPath 表达式。这

//div[div@data-type="folder-name"]

应该读

//div[div/@data-type="folder-name"]

这确实是你在你的一个例子中所拥有的。

于 2013-09-18T07:57:28.623 回答
0

你没有显示任何标记,我假设你有

<div><div data-type="folder-name"></div></div>

你需要:

elems = br.find_elements_by_xpath("//div//div[@data-type='folder-name']")
于 2013-09-18T07:17:35.937 回答
0

如果您尝试使用 data-type="folder-name" 获取所有可能的 div 标签,

//div[@data-type="folder-name"]

如果只有第一个 div 的子元素具有 data-type="folder-name",

//div[div/@data-type="folder-name"]
于 2013-09-18T22:55:32.777 回答