Javascript 如果另一个元素包含特定文本,请单击该元素。量角器自动测试

Javascript 如果另一个元素包含特定文本,请单击该元素。量角器自动测试,javascript,if-statement,protractor,automated-tests,conditional-statements,Javascript,If Statement,Protractor,Automated Tests,Conditional Statements,我需要检查3个元素中的哪一个包含文本“10%”,但我不确定我是否正确获取了元素的文本。当我运行代码时,我没有得到错误,但是if条件总是false(当它应该为true时) 规范中的我的javascript代码: wait-driver.wait(直到.element可见)(wait-driver.findElement(By.css(“tr:nth-child(1).font-weight-bold-light>span”)),30000) wait driver.wait(直到.element可

我需要检查3个元素中的哪一个包含文本“10%”,但我不确定我是否正确获取了元素的文本。当我运行代码时,我没有得到错误,但是if条件总是false(当它应该为true时)

规范中的我的javascript代码:

wait-driver.wait(直到.element可见)(wait-driver.findElement(By.css(“tr:nth-child(1).font-weight-bold-light>span”)),30000)
wait driver.wait(直到.element可见)(wait driver.findElement(By.css(“tr:nth child(2).font-weight bold-light>span”)),30000)
wait driver.wait(直到.element可见)(wait driver.findElement(By.css(“tr:nth child(3).font-weight bold-light>span”)),30000)
var数组=[“tr:n个子项(1).字体粗体显示>span”,“tr:n个子项(2).字体粗体显示>span”,“tr:n个子项(2).字体粗体显示>span”];
var arrayDelete=[“tr:n个孩子(1)img:n个孩子(2)”,“tr:n个孩子(2)img:n个孩子(2)”,“tr:n个孩子(3)img:n个孩子(2)”]
对于(var k=0;k img:n第n个子(2)|
等待driver.findElement(By.css((arrayDelete[k]))。单击()
//12 |暂停| 1000 |
等待驾驶员。睡眠(5000)
//13 | waitForElementVisible | css=.ml-3 | 30000
wait driver.wait(直到.element可见(wait driver.findElement(By.css(“.ml-3”)),30000)
//14 |单击| css=.ml-3 |
等待driver.findElement(By.css(“.ml-3”)。单击()
//15 |暂停| 3000 |
等待驾驶员。睡眠(10000)
//16 | verifyElementNotPresent | css=td:n子项(1)|
{
const elements=await driver.findElements(By.css((allOpts)))
断言(!elements.length)
}
控制台日志(('ho cancellato l obiettivo')+k);
}否则{
console.log(('obiettivo')+k+('non-cancellato,用10%的比索表示);
}
}
我尝试了所有这些:

if (allOpts == (' 10% ')) 
if (allOpts == ('10%')) 
if (allOpts === (' 10% ')) 
if (allOpts === ('10%')) 
if (allOpts.getText() == (' 10% ')) 
if (allOpts.getText()  == ('10%')) 
if (allOpts.getText()  === (' 10% ')) 
if (allOpts.getText()  === ('10%')) 
if (allOpts.getAttribute("value") == (' 10% ')) 
if (allOpts.getAttribute("value")  == ('10%')) 
if (allOpts.getAttribute("value")  === (' 10% ')) 
if (allOpts.getAttribute("value")  === ('10%'))
所有这些都不允许运行if条件的主体

这里是我的html:

<td _ngcontent-lqu-c20="">
  <p _ngcontent-lqu-c20="" class="font-weight-bold-light">
    <!---->
    <span _ngcontent-lqu-c20=""> 10% </span>
  </p>
</td>


10% 


首先,您的语法不是典型的量角器语法(除非您使用的是非常旧的版本)。如果这是您正在使用的工具,请签出它们的

第二,在这一行中,您只是声明了元素,没有对它做任何操作

var allOpts = (await driver.findElement(By.css(array[k])));
您应该已经提取了元素的文本,但使用普通语法看起来是这样的

var allOpts = await element(by.css(array[k])).getText();
第三,这不起作用的原因

if (allOpts.getText() == (' 10% '))
因为这是承诺,你需要通过
.then()
等待它来解决。除非你深入了解这个过程(我的意思是…在所有细节上),否则使用量角器不会走得太远

第四,当您执行
.getText()
操作时,字符串将被修剪,这意味着在开头和结尾没有空格(
'10%'
而不是
'10%'

第五,当有疑问时,只需
console.log()
value即可。这是调试问题的最简单方法


最后,不要使用
=
,而是使用
==
。使用量角器3年来,我从未遇到过必须使用
=
的情况,但使用它时,我确实会产生很多困惑,因为你错过了调用
getText()
来读取web元素上的内容

var allOpts = (await driver.findElement(By.css(array[k])).getText()).trim()

首先,您需要阅读元素的文本,即通过使用
getText()

如果您使用console.log记录元素的文本会发生什么?谢谢,我之前必须考虑一下……无论如何,通过console.log,我看到我没有得到文本,但得到了一些其他东西。我尝试使用var allOpts=wait元素(by.css(array[k])。getText();但我收到了以下错误:失败:等待量角器与页面同步时出错:“angularJS可测试性和角度可测试性都未定义。这可能是因为这是一个非角度页面,或者因为您的测试涉及客户端导航,这可能会干扰量角器的引导。有关详细信息,请参阅”好的,我明白你为什么使用这种语法了。你的应用程序不是有角度的。
browser.waitForAngularEnabled(false)
会解决这个问题……false,我的应用程序是有角度的,如果我添加你的命令(我已经尝试过)我会得到css选择器找不到的错误元素。我刚刚解决了修改这个问题:var allOpts=(wait driver.findElement(by.css(array[k])).getText()).trim()