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

标签 java selenium testing automated-tests selenium-chromedriver

我必须测试一家电子商店。用户可以将商品添加到他们的购物车。 当购物车为空时,将创建一个 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/

相关文章:

Java Graphics2D 获取旋转图像边界和新坐标

Java hashmap 不允许调用 get 方法

python selenium 因查找不存在的元素而挂起

c# - 单元测试内部静态类中的 void 方法

java - Swing应用程序多线程设计模式和最佳实践

java - 使用 Twitter API 1.1 和 Retrofit 检索给定用户的推文列表

selenium - 在zalenium中捕获音频

c# - 为什么Selenium GECKO driver for Firefox 48 无法启动服务器?

html - Aptana 不将文件复制到外部服务器

testing - Kotlintest 拦截器和 lateinit 变量