Selenium Wait Until 使用 Element 而不是 By

Selenium Wait Until using Element rather the By

下午,

我需要一点建议。例如,我有页面对象设置

         IWebElement SiteInUse => DriverContext.Driver.FindElement(By.ClassName("site-txt"));

我有一个方法可以设置 1. 等到元素可见。 2. 检查元素文本是否正确。

我正在尝试做类似

的事情
WaitHelpers.WaitTillVisiible(By.ClassName("site-txt"));

好像 ID 发生了变化,我需要在两个地方对其进行编辑。我正在尝试为 IWebElement 创建一个扩展方法。

我试过了

ublic static bool WaitUntilElementIsVisible(this IWebElement element)
    {
        WebDriverWait wait = new WebDriverWait(DriverContext.Driver, TimeSpan.FromSeconds(30));
       return wait.Until(ElementIsVisible(element));


    }
    public static Func<IWebDriver, bool> ElementIsVisible(IWebElement element)
    {
        return (driver) =>
        {

            try
            {
                return element.Displayed;
            }
            catch (Exception)
            {
                // If element is null, stale or if it cannot be located
                return false;
            }

这有效,但前提是元素可见但不会继续寻找 30 秒。

我做错了什么?

鉴于最初的问题,我将尝试回答,该问题需要测试可见性,但这需要您在两个地方更新定位器。

答案非常简单:为定位器定义一个实例字段:

public class SomePageModel
{
    By siteInUseLocator = By.ClassName("site-txt");

    IWebElement SiteInUse => DriverContext.Driver.FindElement(siteInUseLocator);

    ...
}

稍后您可以重复使用此字段来测试可见性:

WaitHelpers.WaitTillVisiible(siteInUseLocator);