我希望能够等到一个元素显示在文本='凭证后面的帖子'。但是,当我尝试以下时,我正在接受一个 不能将void指定为隐式变量,也不能将OpenQA.Seleinium.By转换为OpenQA.Seleinium.ISearchContent。
我需要做些什么来解决以下问题:
public bool CheckBasketHolidayVoucherTextIsNotPresent(string basketLocation)
{
var topBasketItems = _driver.FindElements(CommonPageElements.TopBasketItems);
var bottomBasketItems = _driver.FindElements(CommonPageElements.BottomBasketItems);
var basketItems = basketLocation.ToLower() == "top" ? topBasketItems : bottomBasketItems;
By selector = basketLocation.ToLower() == "top" ?
CommonPageElements.TopBasketItems :
CommonPageElements.BottomBasketItems;
var test = _driver.WaitToBeInvisible(selector.FindElements(CommonPageElements.TopBasketItems).Text.Contains("Vouchers by post"), 5);
return test.All(b => b.Text != "Vouchers by post");
}
答案 0 :(得分:0)
在知道项目的位置(By)之后,创建一个方法,尝试等待元素出现0秒(即时检查页面上是否有任何元素),如下所示:
public bool isElementVisible(By locator)
{
try
{
new WebDriverWait(driver, TimeSpan.FromSeconds(0)).Until(ExpectedConditions.ElementExists(locator));
try
{
new WebDriverWait(driver, TimeSpan.FromSeconds(0)).Until(ExpectedConditions.ElementIsVisible(locator));
}
catch (WebDriverTimeoutException)
{
//Element exists but is not visible, return false or do other stuff
return false
}
}
catch (WebDriverTimeoutException)
{
//Element does not exist, return false or do other stuff
return false;
}
//If code reaches this point, element both exists and is visible
return true;
}
您可以根据需要调整TimeSpan秒或分钟以等待元素显示。您可以进行重载,将超时作为参数和"默认"没有超时的函数,将使用超时0调用自身。
毕竟,你可以在函数的底部添加一些代码行来检查元素的文本,如果它是你想要的那个,它将返回。返回适当的值。