javascript - 使用 xpath 和 nightwatch.js 单击动态文本

标签 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 能够毫无问题地点击文本。

任何关于我使用任何一种方法出错的地方的帮助都会很棒!我使用的是节点 v7.8.0

最佳答案

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

应该是

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

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

关于javascript - 使用 xpath 和 nightwatch.js 单击动态文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44314715/

相关文章:

javascript - 从此功能中删除摘要选项(博客文章)

javascript - AngularJS 中不同 Controller 之间的真实切换按钮

javascript - 关于在 firebase 云函数中 promise 的 then 回调中返回空值的问题

java - selenium 如何以及在哪里将 java/其他 HL 编程语言命令转换为 native javascript 以与浏览器交互?

sql - sql查询soap获取以s命名的第一个元素:Body

javascript - 类型错误 : Cannot read property 'open' of undefined (Phonegap and Ionic)

java - Selenium 卡在 "findElementBy"上

c# - 如何在C#中获取下拉菜单的选定值

html - 使用 XPath 获取 HTML 元素的文本内容?

xslt - 基于动态字符串的XPATH语句评估