我想要实现的目标: 如果该元素可用,则使用它,否则请使用另一个定位器。
编辑:
我之前的解释有点差,所以让我们从头开始。我有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));
}
Spec.js
expect(delivery + price).toEqual(basket.totalAmount());
#1案例-量角器结果:失败
Expected 30.5 to equal 58.
30.5
-(交付成本+价格),这是正确的。
58.0
-这是不正确的,因为第一个条件为真,所以不是30.5
吗?
如果我要去
this.price = this.basket.element(by.css('.total-amount span'));
那么就没有失败。
我想编写更灵活的测试并涵盖这两种情况,因为价格经常变化。
答案 0 :(得分:0)
更新后的答案
看来您原来的定位器很好,但是您的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'));
});
原始答案
您正确使用了“或”,但定位器的结构不正确。
如果我们分解定位器element(by.css('.total-amount span, .total-amount'));
,我们可以看到有两个条件。如果第一个满意,则将其返回。如果不满意第一个,则找到后返回第二个。
但是,您永远不会得到30.50
的返回,因为第二个条件将返回td
元素本身。如果您想获得销售价格(如果存在),而<s>
(如果销售价格不存在),则您需要运行此行
element(by.css('.total-amount s, .total-amount span'))