NightwatchJS 中的 xPath 问题

Posted

技术标签:

【中文标题】NightwatchJS 中的 xPath 问题【英文标题】:xPath issue in NightwatchJS 【发布时间】:2017-04-30 01:04:26 【问题描述】:

我正在尝试测试我在 NightwatchJS 中创建的命令,但我不断收到与选择器相关的错误。错误是“预期为‘可见’但得到:‘未找到’”。这似乎与第二个选择器的 xPath 不正确有关。 选择器函数利用 xPath 并使用 Nightwatch 方法 .waitForElementVisible 测试元素。我在我正在使用的命令之外创建了一个通用命令(基本上只是一个选择器),它使用文件名作为参数成功选择了元素。问题是第二个选择器(shoeboxDropdown),它采用第一个选择器(shoeboxSelectButton)并添加了一个/div。 shoeboxDropdown 选择器必须与 shoeboxSelectButton 相关。我想要做的是选择按钮,然后单击该按钮的下拉菜单。如果您查看 xPath,您可能会看到我的 delim。

鞋盒选择按钮:

  "//*[@id=\"sidebar-plugins\"]/div[1]/div[3]/div/div/div[2]/div[1]/ul/li/div[span/text()='" + filename + "']"

鞋盒下拉:

//*[@id="sidebar-plugins"]/div[1]/div[3]/div/div/div[2]/div[1]/ul/li/div[2]

它们都位于同一列表项li 下,但位于单独的divs 下。文件名的文本位于div[1],而下拉菜单位于div[2]。如何使用第一个选择器通过 xPath 获取第二个选择器?

shoeboxSelectButton = require "../Common/shoeboxSelectButton"

exports.command = (filename) ->
    mappx = @page.mappx()

    shoeboxDropdown = () ->
      shoeboxSelectButton(filename) + "/div" 

【问题讨论】:

【参考方案1】:

尝试使用父选择器,然后索引到第二个 div。像这样的……

"//*[@id=\"sidebar-plugins\"]/div1/div[3]/div/div/div[2]/div1/ul/li/div[ span/text()='" + 文件名 + "']/../div[2]"

https://www.simple-talk.com/dotnet/net-framework/xpath-css-dom-and-selenium-the-rosetta-stone/我个人使用Rosetta stone pdf for xpath 来找出其中一些类型的案例。

【讨论】:

哇,罗塞塔石碑的文档太棒了!谢谢。不幸的是,添加 /../div[2] 不起作用。【参考方案2】:

好的-经过多次试验,我能够弄清楚。似乎添加// 允许从初始路径派生路径。我的解决方案看起来有点像这样,我也能够将它应用于其他选择器。首先,我必须将我的 shoeboxSelectButton 选择器的 xPath 调整为此(注意:这是在 Coffeescript 中):

module.exports = (filename) ->
"//*[@id=\"sidebar-plugins\"]/div[1]/div[3]/div/div/div[2]/div[1]/ul/li[.//span/text()='" + filename + "']"

然后,更改我的命令中的代码以派生 shoeboxDropdown(和 shoeboxRemoveButton)的选择器,如下所示:

shoeboxSelectButton = require "../Common/shoeboxSelectButton"

exports.command = (filename) ->
    mappx = @page.mappx()

shoeboxDropdown = () ->
    shoeboxSelectButton(filename) + "//em"

shoeboxRemoveButton = () ->
    shoeboxSelectButton(filename) + "//ul/li[3]/a"

最后,我只需要在测试文件中打一个电话,然后哇啦;有用!希望这对将来的某人有所帮助。

browser.ShoeboxPanel.deleteShoebox "Typical"  

【讨论】:

以上是关于NightwatchJS 中的 xPath 问题的主要内容,如果未能解决你的问题,请参考以下文章

NightwatchJS 和 WebdriverIO 有啥区别?

使用 XCUI 在 iOS 模拟器上使用 NightwatchJS 进行自动化测试

Nightwatchjs:如何在不创建错误/失败/异常的情况下检查元素是不是存在

nightwatchjs 基于nodejs&& webdriver 协议的自动化测试&&持续集成框架

有任何 XPath/XSLT/XQuery 3.0 特定的学习资源吗?

Xpath()语法