NightwatchJS 中的 xPath 问题
xPath issue in NightwatchJS
我正在尝试测试我在 NightwatchJS 中创建的命令,但我不断收到与 selectors 相关的错误。错误是 "expected 'visible' but got: 'not found'"。这似乎与第二个 selector 的 xPath 不正确有关。
selector 函数利用 xPath 并使用 Nightwatch 方法 .waitForElementVisible
测试元素。我在我正在使用的命令之外创建了一个通用命令(基本上只是一个 selector),成功地 selects 使用文件名作为参数的元素。问题是第二个 selector (shoeboxDropdown),它采用第一个 selector(shoeboxSelectButton) 并添加一个 /div。 shoeboxDropdown select 或必须与 shoeboxSelectButton 相关。我想要做的是 select 按钮,然后单击该按钮的下拉菜单。如果您查看 xPaths,您可能会看到我的 delima。
鞋盒选择按钮:
"//*[@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]
。如何使用第一个 select 或使用 xPath 获取第二个?
shoeboxSelectButton = require "../Common/shoeboxSelectButton"
exports.command = (filename) ->
mappx = @page.mappx()
shoeboxDropdown = () ->
shoeboxSelectButton(filename) + "/div"
尝试使用父选择器,然后索引到第二个 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/ I personally use the Rosetta stone pdf for xpath 找出其中一些类型的案例。
好的-经过多次试验我终于弄明白了。似乎添加 //
允许路径从初始路径派生。我的解决方案看起来有点像这样,我也能够将其应用于其他选择器。首先,我必须将我的 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 中创建的命令,但我不断收到与 selectors 相关的错误。错误是 "expected 'visible' but got: 'not found'"。这似乎与第二个 selector 的 xPath 不正确有关。
.waitForElementVisible
测试元素。我在我正在使用的命令之外创建了一个通用命令(基本上只是一个 selector),成功地 selects 使用文件名作为参数的元素。问题是第二个 selector (shoeboxDropdown),它采用第一个 selector(shoeboxSelectButton) 并添加一个 /div。 shoeboxDropdown select 或必须与 shoeboxSelectButton 相关。我想要做的是 select 按钮,然后单击该按钮的下拉菜单。如果您查看 xPaths,您可能会看到我的 delima。
鞋盒选择按钮:
"//*[@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]
。如何使用第一个 select 或使用 xPath 获取第二个?
shoeboxSelectButton = require "../Common/shoeboxSelectButton"
exports.command = (filename) ->
mappx = @page.mappx()
shoeboxDropdown = () ->
shoeboxSelectButton(filename) + "/div"
尝试使用父选择器,然后索引到第二个 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/ I personally use the Rosetta stone pdf for xpath 找出其中一些类型的案例。
好的-经过多次试验我终于弄明白了。似乎添加 //
允许路径从初始路径派生。我的解决方案看起来有点像这样,我也能够将其应用于其他选择器。首先,我必须将我的 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"