我希望在我的应用程序中单击带有动态文本的元素。通常,要单击带有文本的元素,我会执行以下操作:
.useXpath().click("//*[contains(text(), 'some text')]")
对于具有动态名称的测试,我尝试以下操作:
.useXpath().click("//*[contains(text(), "${name}")]")
其中 name 是一个变量,其中包含新创建的帐户的名称。但是,当我尝试运行测试时,我得到以下信息:
.useXpath().click("//*[contains(text(), "${name}")]")
^^^^^^^^^^^^^^^^^^^^^^^
SyntaxError: missing ) after argument list
我错过了什么吗?我不明白我在哪里错过了)。我也尝试过各种单/双引号等,但似乎无法让它工作。
我还尝试使用此处概述的字符串连接:(在 CasperJS 中将变量传递到 XPath 表达式 https://stackoverflow.com/questions/36617282/passing-a-variable-into-an-xpath-expression-in-casperjs),所以我的代码如下所示:
var selector = "\'//*[contains(text(), \'" + name + "\')]\'";
.useXpath().click(selector)
当我使用此方法运行测试时,我得到以下结果:
ERROR: Unable to locate element: "'//*[contains(text(), '7ayhopt3ijhcwuo')]'" using: xpath
“7ayhopt3ijhcwuo”是点击的正确文本,但似乎没有找到它。有趣的是,如果我像这样硬编码该值:
.useXpath().click("//*[contains(text(), '7ayhopt3ijhcwuo')]")
Nightwatch 能够毫无问题地点击文本。
如果我对这两种方法出错的地方有任何帮助,那就太好了!我使用的是节点 v7.8.0