如何通过文本检查元素是不可见的

时间:2017-11-15 08:46:45

标签: c# selenium

我希望能够等到一个元素显示在文本='凭证后面的帖子'。但是,当我尝试以下时,我正在接受一个 不能将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");
    }

1 个答案:

答案 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调用自身。

毕竟,你可以在函数的底部添加一些代码行来检查元素的文本,如果它是你想要的那个,它将返回。返回适当的值。