Селен c # ждать, используя имя элемента вместо локатора (By.Id) - PullRequest
0 голосов
/ 26 июня 2018

Есть ли способ передать имя IWebElement в качестве параметра для Wait вместо локатора (используя Id, Xpath и т. Д.)?

Я пытаюсь написать некоторый код, используя объектную модель страницы, и я уже определил элементы в классе 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 в качестве параметра методу ожидания, чтобы мне больше не приходилось передавать Id при вызове метода?

Я искал решения и не мог их найти. Извиняюсь, если есть решение, которое я пропустил. Я новичок в C # и Selenium, поэтому любая помощь будет принята с благодарностью. Спасибо

1 Ответ

0 голосов
/ 26 июня 2018

Вы можете написать свой собственный ExpectedCondition. Вы можете видеть источник Selenium здесь и следовать этому шаблону, принимая IWebElement в качестве параметра.

Это может быть что-то вроде

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