Java ExpectedConditions.或功能未按预期工作
我必须测试一个电子商店。用户可以将项目添加到购物车中。 当购物车为空时,将创建一个id为“empty basket”的特殊区域。如果购物车不是空的,则该部分的id变为“basket” 我使用Java和Selenium 3.9 这是我的两个选择器Java ExpectedConditions.或功能未按预期工作,java,selenium,testing,automated-tests,selenium-chromedriver,Java,Selenium,Testing,Automated Tests,Selenium Chromedriver,我必须测试一个电子商店。用户可以将项目添加到购物车中。 当购物车为空时,将创建一个id为“empty basket”的特殊区域。如果购物车不是空的,则该部分的id变为“basket” 我使用Java和Selenium 3.9 这是我的两个选择器 @FindBy(how = How.CSS, using = "#empty-basket > section") private WebElement conteneur_panier_vide; @FindBy(how = How.CSS,
@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;
为了检查包含元素的bloc是否格式良好,我检查是否有上面描述的部分之一。我使用这段代码来实现这一点:
this.wait.until(
ExpectedConditions.or(
ExpectedConditions.visibilityOf(conteneur_panier_vide),
ExpectedConditions.visibilityOf(conteneur_panier_non_vide)
)
);
然而,这给了我一个错误
org.openqa.selenium.TimeoutException:预期条件失败:正在等待至少一个条件
有效的
很惊讶,我尝试了以下方法:
this.wait.until(ExpectedConditions.visibilityOf(conteneur_panier_vide))
this.wait.until(
ExpectedConditions.or(
ExpectedConditions.visibilityOf(conteneur_panier_vide),
)
);
在一页上有一个空篮子。它工作了,找到了WebElement
然后我试了一下:
this.wait.until(ExpectedConditions.visibilityOf(conteneur_panier_vide))
this.wait.until(
ExpectedConditions.or(
ExpectedConditions.visibilityOf(conteneur_panier_vide),
)
);
而且它也很有效。这意味着向“or”添加一个不存在的元素会破坏它,这与它应该是什么正好相反
有人知道为什么我的代码不起作用吗
编辑:解决了 问题是,调用
或
函数时,我正在查找的元素不在页面上,导致上述故障
我简单地说
this.wait.until(ExpectedConditions.urlContains(MY_CART_URL));
这确保了两个部分之一的存在。您是否实例化了等待对象?您没有指定您的环境,但以下是我在中所做的 C#
var wait=new-WebDriverWait(驱动程序,TimeSpan.FromSeconds(10))代码>
Java
WebDriverWait wait=newwebdriverwait(驱动程序,20)代码>您是否实例化了等待对象?您没有指定您的环境,但以下是我在中所做的
C#
var wait=new-WebDriverWait(驱动程序,TimeSpan.FromSeconds(10))代码>
Java
WebDriverWait wait=newwebdriverwait(驱动程序,20)代码>我确实解决了这个问题,并编辑了这个问题以让人们知道
TL;博士:
在调用或
函数之前,我需要一些延迟,并通过等待URL为正确的URL来实现这一点。我确实解决了问题,并编辑了问题以让人们知道
TL;博士:
在调用或函数之前,我需要一些延迟,并通过等待URL为正确的URL来完成此操作。您可以做两件事来清理此问题:
创建一个匹配这两个元素的CSS选择器
使用ExpectedConditions.visibilityOfElementLocated(By.css(…)
而不是更复杂的或
//CSS选择器可以用逗号(,)分隔
字符串cssSelector=“#空篮子>部分,#篮子>部分:第n个子项(1)”;
此.wait.until(由.cssSelector(cssSelector))定位的元素的预期条件.可见性);
您最初的问题是,使用conteneur\u panier\u vide
和conteneur\u panier\u non\u vide
属性会导致Selenium尝试获取它们。您只需等待其中一个元素的出现。有两种方法可以清除此问题:
创建一个匹配这两个元素的CSS选择器
使用ExpectedConditions.visibilityOfElementLocated(By.css(…)
而不是更复杂的或
//CSS选择器可以用逗号(,)分隔
字符串cssSelector=“#空篮子>部分,#篮子>部分:第n个子项(1)”;
此.wait.until(由.cssSelector(cssSelector))定位的元素的预期条件.可见性);
您最初的问题是,使用conteneur\u panier\u vide
和conteneur\u panier\u non\u vide
属性导致Selenium尝试获取它们。您只需等待其中一个元素的出现。您好,是的,我的WebDriverWait对象被实例化,超时10秒。您好,是的,我的WebDriverWait对象是inst设置为10秒超时。this.wait.until(ExpectedConditions.visibilityOfElementLocated(By.css(cssSelector));
应设置为this.wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector)(cssSelector)))
@SzmaKS:Good catch.Fixed!您的方法有效,但有一点输入错误:this.wait.until(ExpectedConditions.visibilityOfElementLocated(By.css(cssSelector));
应该是this.wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector));
@SzmaKS:Good catch.Fixed!