【问题标题】:Condition in Protractor test: doing action if element contains a certain text量角器测试中的条件:如果元素包含特定文本则执行操作
【发布时间】:2020-07-24 01:45:20
【问题描述】:

我需要检查 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%'))

这些都不允许运行 if 条件的主体。

这是我的html:

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

【问题讨论】:

    标签: javascript asynchronous protractor automated-tests conditional-statements


    【解决方案1】:

    在这一行 let allOpts = element(by.css(array[i])); 你声明了一个单一元素(elementArrayFinder 本来是 element.all...)

    即使存在多个元素,它也会找到第一个!

    所以你的viewName 是一个文本字符串,它不是一个数组

    如果你的viewName === '10%',那么viewName.length === 3,因为它只是字符串的长度

    这就是为什么你的条件应该是if (viewName === '10%') {

    另外,在.click()之前不要忘记await

    【讨论】:

    • @Nicola 如果有帮助,请接受答案并点赞
    • 我不能投票,因为我是新成员,但我已经编辑了我的问题,如果你能接受我会非常优雅。
    • @Nicola 为避免混淆,您能否创建另一个问题。我会跳进去
    猜你喜欢
    • 2017-11-29
    • 1970-01-01
    • 2020-11-13
    • 2016-10-29
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 2019-12-28
    • 2023-03-07
    相关资源
    最近更新 更多