【问题标题】:selenium simple test says xpath is not a legal expressionselenium 简单测试说 xpath 不是合法表达式
【发布时间】:2014-01-02 17:09:01
【问题描述】:

我开始使用 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 代码有一些提示,那将是一个很大的帮助。

【问题讨论】:

    标签: xpath selenium selenium-webdriver


    【解决方案1】:

    这不是一个有效的 XPath 表达式。这个

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

    应该读

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

    这确实是您在其中一个示例中所拥有的。

    【讨论】:

    • 谢谢迈克尔·凯。现在很明显,但由于某种原因我一直看不到这一点。
    • 是div/@data-type="folder-name"是指外面div的所有孩子吗?
    【解决方案2】:

    如果您尝试获取所有可能的 div 标签,数据类型为“文件夹名称”,

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

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

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

    【讨论】:

      【解决方案3】:

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

      &lt;div&gt;&lt;div data-type="folder-name"&gt;&lt;/div&gt;&lt;/div&gt;

      你需要:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 2019-02-26
        • 2018-09-22
        • 1970-01-01
        • 2018-10-28
        • 1970-01-01
        • 2017-12-31
        相关资源
        最近更新 更多