gpt4 book ai didi

css - Protractor - 如何在定位器中使用 "or"

转载 作者:行者123 更新时间:2023-11-28 00:16:28 25 4
gpt4 key购买 nike

我想要实现的目标:如果该元素可用,则使用它,如果不可用,则使用另一个定位器。

编辑:

我之前的解释有点差所以,让我们从头开始。我有 2 个案例:

  1. 出现促销价时。
  2. 当促销价不存在时,仅存在正常价格。

#1 案例标记:存在销售价格时。

<td class="total-amount">
<s>58.00</s>
<span>£30.50</span>
</td>

span - 销售价格。s - 正常价格。

#2 案例标记:当没有销售时,只有正常价格存在

<td class="total-amount">£78.00</td>

Basket.js

this.price = this.basket.element(by.css('.total-amount span, .total-amount'));
----
totalAmount() {
return this.getAttribute('attribute-name')
.then(summaryprice => summaryprice.slice(1))
.then(summaryprice => parseFloat(summaryprice));
}

规范.js

expect(delivery + price).toEqual(basket.totalAmount());

#1 案例 - Protractor 结果:失败

Expected 30.5 to equal 58.

30.5 -(运费 + 价格)是正确的。58.0 - 这是不正确的,因为第一个条件为真所以它不应该是 30.5 吗?

如果我去:

this.price = this.basket.element(by.css('.total-amount span'));

那么就没有失败。

我想编写更灵活的测试并涵盖这两种情况,因为价格经常变化。

最佳答案

更新的答案看来您的原始定位器没问题,但您的 totalAmount函数没有返回正确的值。如果您确实想尝试使用定位器的替代方法来获取价格,您可以尝试这种方法,但您所采用的方法应该可行。

let price = element(by.css('.total-amount span')).isDisplayed()
.then(disp => {
return element(by.css('.total-amount span'));
})
.catch(err => {
return element(by.css('.total-amount'));
});

原始答案

您正确使用了“OR”,但您的定位器结构不正确。

如果我们分解这个定位器 element(by.css('.total-amount span, .total-amount'));我们可以看到有两个条件。如果第一个满意,那么它将被退回。如果第一个不满足,则如果找到第二个,则返回第二个。

但是你永远不会得到30.50作为第二个条件返回将返回 td元素本身。如果您想获得销售价格,但 <s>如果销售价格不存在,那么您将需要运行这条线

element(by.css('.total-amount s, .total-amount span'))

关于css - Protractor - 如何在定位器中使用 "or",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55079593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com