使用xpath和nightwatch.js

时间:2017-06-01 18:32:17

标签: javascript selenium xpath selenium-webdriver nightwatch.js

我希望在我的应用中点击带有动态文字的元素。通常,要点击带有文本的元素,我会执行以下操作:

.useXpath().click("//*[contains(text(), 'some text')]")    

对于具有动态名称的测试,我尝试以下操作:

.useXpath().click("//*[contains(text(), "${name}")]")  

其中name是一个变量,其中包含新创建的帐户的名称。但是,当我尝试运行测试时,我得到以下结果:

.useXpath().click("//*[contains(text(), "${name}")]")
                    ^^^^^^^^^^^^^^^^^^^^^^^
SyntaxError: missing ) after argument list

我错过了什么吗?我没有看到我错过的地方)。我也试过各种单/双引号等,但似乎无法让它工作。

我还尝试使用此处概述的字符串连接:(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可以毫无问题地点击文字。

任何方法的任何帮助我都会出错!我使用的是node v7.8.0

2 个答案:

答案 0 :(得分:2)

"\'//*[contains(text(), \'" + name + "\')]\'"

应该是

"//*[contains(text(), '" + name + "')]"

您不需要转义双引号字符串中的单引号。

答案 1 :(得分:1)

使用字符串周围的反向字符来嵌入变量:

.useXpath().click(`//*[contains(text(), "${name}")]`)

或使用单引号和双引号的组合:

.useXpath().click('//*[contains(text(), "' + name + '")]')