硒c#等待使用元素名称而不是定位符(By.Id)

时间:2018-06-26 14:36:02

标签: selenium selenium-webdriver wait

是否有任何方法可以将IWebElement名称作为参数而不是定位符(使用Id,Xpath等)传递给Wait?

我正在尝试使用页面对象模型编写一些代码,并且我已经确定了POM类中的元素,如下所示:

class MyTestPagePom
{
    private IWebDriver driver;

    //Locators
    [FindsBy(How =How.Id, Using = "Questions[0].Answers[0].Id")]
    public IWebElement MyTestElement1 { get; set; }
}

现在我有一个执行以下操作的等待方法:

public static void HandleWait(IWebDriver driver, By ElementIdentified, int TimeoutInSeconds)
    {
        var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(TimeoutInSeconds));
        wait.Until(drv => drv.FindElement(ElementIdentified).Displayed);
    }

该方法的调用方式如下:

HandleWait(driver, By.Id("Questions[0].Answers[0].Id"), 30);

有没有一种方法可以将IWebElement名称作为参数传递给wait方法,以便在调用该方法时不必再次传递Id?

我已经搜索了解决方案,但找不到任何解决方案。抱歉,如果有我错过的解决方案。我是C#和Selenium的新手,因此将非常感谢您的帮助。谢谢

1 个答案:

答案 0 :(得分:0)

您可以编写自己的自定义ExpectedCondition。您可以看到硒源here并遵循该模式,将IWebElement作为参数。

可能类似于

public static Func<IWebDriver, IWebElement> ElementIsVisible(IWebElement element)
{
    return (driver) =>
    {
        try
        {
            return element.Displayed ? element : null;
        }
        catch (Exception)
        {
            return null;
        }
    };
}