gpt4 book ai didi

java - ExpectedConditions.or 函数未按预期工作

转载 作者:行者123 更新时间:2023-11-28 20:48:09 24 4
gpt4 key购买 nike

我必须测试一家电子商店。用户可以将商品添加到他们的购物车。当购物车为空时,将创建一个 ID 为“empty-basket”的特殊部分。如果购物车不为空,则此部分的 id 变为“篮子”。

我使用 Java 和 Selenium 3.9

这是我的两个选择器

@FindBy(how = How.CSS, using = "#empty-basket > section")
private WebElement conteneur_panier_vide;

@FindBy(how = How.CSS, using = "#basket > section:nth-child(1)")
private WebElement conteneur_panier_non_vide;

为了检查包含元素的 block 是否格式正确,我检查是否存在上述部分之一。我使用这段代码来这样做:

this.wait.until(
ExpectedConditions.or(
ExpectedConditions.visibilityOf(conteneur_panier_vide),
ExpectedConditions.visibilityOf(conteneur_panier_non_vide)
)
);

但是,这给了我一个错误

org.openqa.selenium.TimeoutException: Expected condition failed: waiting for at least one condition to be valid

很惊讶,我试过这个:

this.wait.until(ExpectedConditions.visibilityOf(conteneur_panier_vide))

在一个空篮子的页面上。它有效,找到了 WebElement。

然后我尝试了这个:

this.wait.until(
ExpectedConditions.or(
ExpectedConditions.visibilityOf(conteneur_panier_vide),
)
);

而且效果也很好。这意味着向“或”添加一个不存在的元素会破坏它,这与它应该是的完全相反。

有谁知道为什么我的代码不起作用?


编辑:已解决!

问题是调用函数时,我要查找的元素不在页面上,导致上述故障。

简单的说

this.wait.until(ExpectedConditions.urlContains(MY_CART_URL));

这确保了两个部分之一的存在。

最佳答案

你可以做两件事来清理它:

  1. 创建一个匹配这两个元素的 CSS 选择器
  2. 使用 ExpectedConditions.visibilityOfElementLocated(By.css(...)) 而不是更复杂的
// CSS selectors can be separated by a comma (,)
String cssSelector = "#empty-basket > section, #basket > section:nth-child(1)";

this.wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(cssSelector));

您最初的问题是使用 conteneur_panier_videconteneur_panier_non_vide 属性导致 Selenium 尝试获取它们。您只需要等待任一元素的出现即可。

关于java - ExpectedConditions.or 函数未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58013711/

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