如果另一个元素包含特定文本,请单击该元素。使用 Protractor 进行自动化测试
Click an element if another element contains a specific text. Automated Test with Protractor
我需要检查 3 个元素中的哪一个包含文本“10%”,但我不确定我是否正确获取了该元素的文本。当我 运行 代码时,我没有收到错误,但 if 条件始终为假(当它应该为真时)。
我的 javascript 规范中的代码:
await driver.wait(until.elementIsVisible(await driver.findElement(By.css("tr:nth-child(1) .font-weight-bold-light > span"))), 30000)
await driver.wait(until.elementIsVisible(await driver.findElement(By.css("tr:nth-child(2) .font-weight-bold-light > span"))), 30000)
await driver.wait(until.elementIsVisible(await driver.findElement(By.css("tr:nth-child(3) .font-weight-bold-light > span"))), 30000)
var array = ["tr:nth-child(1) .font-weight-bold-light > span", "tr:nth-child(2) .font-weight-bold-light > span", "tr:nth-child(2) .font-weight-bold-light > span"];
var arrayDelete = ["tr:nth-child(1) img:nth-child(2)", "tr:nth-child(2) img:nth-child(2)", "tr:nth-child(3) img:nth-child(2)"]
for (var k = 0; k<array.length; k++){
var allOpts = (await driver.findElement(By.css(array[k])));
await driver.sleep(2000)
if (allOpts == ('10%')) {
await driver.sleep(2000)
await driver.wait(until.elementIsVisible(await driver.findElement(By.css(arrayDelete[k]))), 30000)
// 11 | click | css=.actions > img:nth-child(2) |
await driver.findElement(By.css((arrayDelete[k]))).click()
// 12 | pause | 1000 |
await driver.sleep(5000)
// 13 | waitForElementVisible | css=.ml-3 | 30000
await driver.wait(until.elementIsVisible(await driver.findElement(By.css(".ml-3"))), 30000)
// 14 | click | css=.ml-3 |
await driver.findElement(By.css(".ml-3")).click()
// 15 | pause | 3000 |
await driver.sleep(10000)
// 16 | verifyElementNotPresent | css=td:nth-child(1) |
{
const elements = await driver.findElements(By.css((allOpts)))
assert(!elements.length)
}
console.log(('ho cancellato l obiettivo ')+ k);
} else {
console.log(('obiettivo ') + k + (' non cancellato, in quanto il suo peso non è 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%'))
None 其中允许 运行 if 条件的主体。
这是我的 html:
<td _ngcontent-lqu-c20="">
<p _ngcontent-lqu-c20="" class="font-weight-bold-light">
<!---->
<span _ngcontent-lqu-c20=""> 10% </span>
</p>
</td>
首先,您的语法不是量角器的典型语法(除非您使用的是一些非常旧的版本)。如果这是您使用的工具,请查看他们的 documentation
其次,在这一行中,您只是声明元素而不对其进行任何操作
var allOpts = (await driver.findElement(By.css(array[k])));
您应该已经提取了元素的文本。但是使用普通语法它看起来像这样
var allOpts = await element(by.css(array[k])).getText();
三,这个不行的原因
if (allOpts.getText() == (' 10% '))
是因为这是承诺,您需要通过 .then()
或 await
ing 来解决。除非你深入了解这个过程(我是认真的......在所有细节中),否则你不会对量角器走得太远
第四,当你做 .getText()
时,你的字符串会被修剪,这意味着开头和结尾没有空格('10%'
而不是 ' 10% '
)
五,有疑问时,就console.log()
这个值。这是调试问题的最简单方法
最后,不要使用 ==
,而是使用 ===
。在使用量角器 3 年的时间里,我从来没有遇到过必须使用 ==
的情况,但是在使用它时 coercion 我确实遇到过很多困惑
您错过了调用 getText()
来阅读网络元素上的内容
var allOpts = (await driver.findElement(By.css(array[k])).getText()).trim()
首先您需要阅读元素的文本,即使用 getText()
。
我需要检查 3 个元素中的哪一个包含文本“10%”,但我不确定我是否正确获取了该元素的文本。当我 运行 代码时,我没有收到错误,但 if 条件始终为假(当它应该为真时)。
我的 javascript 规范中的代码:
await driver.wait(until.elementIsVisible(await driver.findElement(By.css("tr:nth-child(1) .font-weight-bold-light > span"))), 30000)
await driver.wait(until.elementIsVisible(await driver.findElement(By.css("tr:nth-child(2) .font-weight-bold-light > span"))), 30000)
await driver.wait(until.elementIsVisible(await driver.findElement(By.css("tr:nth-child(3) .font-weight-bold-light > span"))), 30000)
var array = ["tr:nth-child(1) .font-weight-bold-light > span", "tr:nth-child(2) .font-weight-bold-light > span", "tr:nth-child(2) .font-weight-bold-light > span"];
var arrayDelete = ["tr:nth-child(1) img:nth-child(2)", "tr:nth-child(2) img:nth-child(2)", "tr:nth-child(3) img:nth-child(2)"]
for (var k = 0; k<array.length; k++){
var allOpts = (await driver.findElement(By.css(array[k])));
await driver.sleep(2000)
if (allOpts == ('10%')) {
await driver.sleep(2000)
await driver.wait(until.elementIsVisible(await driver.findElement(By.css(arrayDelete[k]))), 30000)
// 11 | click | css=.actions > img:nth-child(2) |
await driver.findElement(By.css((arrayDelete[k]))).click()
// 12 | pause | 1000 |
await driver.sleep(5000)
// 13 | waitForElementVisible | css=.ml-3 | 30000
await driver.wait(until.elementIsVisible(await driver.findElement(By.css(".ml-3"))), 30000)
// 14 | click | css=.ml-3 |
await driver.findElement(By.css(".ml-3")).click()
// 15 | pause | 3000 |
await driver.sleep(10000)
// 16 | verifyElementNotPresent | css=td:nth-child(1) |
{
const elements = await driver.findElements(By.css((allOpts)))
assert(!elements.length)
}
console.log(('ho cancellato l obiettivo ')+ k);
} else {
console.log(('obiettivo ') + k + (' non cancellato, in quanto il suo peso non è 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%'))
None 其中允许 运行 if 条件的主体。
这是我的 html:
<td _ngcontent-lqu-c20="">
<p _ngcontent-lqu-c20="" class="font-weight-bold-light">
<!---->
<span _ngcontent-lqu-c20=""> 10% </span>
</p>
</td>
首先,您的语法不是量角器的典型语法(除非您使用的是一些非常旧的版本)。如果这是您使用的工具,请查看他们的 documentation
其次,在这一行中,您只是声明元素而不对其进行任何操作
var allOpts = (await driver.findElement(By.css(array[k])));
您应该已经提取了元素的文本。但是使用普通语法它看起来像这样
var allOpts = await element(by.css(array[k])).getText();
三,这个不行的原因
if (allOpts.getText() == (' 10% '))
是因为这是承诺,您需要通过 .then()
或 await
ing 来解决。除非你深入了解这个过程(我是认真的......在所有细节中),否则你不会对量角器走得太远
第四,当你做 .getText()
时,你的字符串会被修剪,这意味着开头和结尾没有空格('10%'
而不是 ' 10% '
)
五,有疑问时,就console.log()
这个值。这是调试问题的最简单方法
最后,不要使用 ==
,而是使用 ===
。在使用量角器 3 年的时间里,我从来没有遇到过必须使用 ==
的情况,但是在使用它时 coercion 我确实遇到过很多困惑
您错过了调用 getText()
来阅读网络元素上的内容
var allOpts = (await driver.findElement(By.css(array[k])).getText()).trim()
首先您需要阅读元素的文本,即使用 getText()
。