Как ждать любого из двух элементов на странице, используя селен в C# - PullRequest
0 голосов
/ 16 января 2020

Похоже, что есть метод ExpectedCondition.Or() в селене для других языков, но я не смог найти его в DotNetSeleniumExtras.WaitHelpers для. NET

Есть ли способ проверить, существует ли один из двух элементов используя Selenium с. NET?

Ответы [ 2 ]

1 голос
/ 16 января 2020

Есть несколько способов сделать это.

  1. Вставьте «ИЛИ» в свой локатор. Пример с CSS селекторами является добавление , в локатор. Если вы хотите найти элемент с идентификатором element1 или идентификатором element2, то вы можете использовать селектор CSS #element1, #element2. В XPath есть оператор OR, если вы тоже этого хотите. См. this в качестве одного примера.

  2. Вы можете написать свое собственное пользовательское условие, которое принимает массив локаторов (на случай, если вы хотите искать больше двух). .

    public Func<IWebDriver, IWebElement> AnyElementExists(By[] locators)
    {
        return (driver) =>
        {
            foreach (By locator in locators)
            {
                IReadOnlyCollection<IWebElement> e = _driver.FindElements(locator);
                if (e.Any())
                {
                    return e.ElementAt(0);
                }
            }
    
            return null;
        };
    }
    

    и затем назовите его как

    By[] locators = { By.Id("element1"), By.Id("element2") };
    IWebElement foundElement = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(AnyElementExists(locators));
    

    , а затем foundElement - первый найденный элемент, который соответствует вашим локаторам. Может быть несколько совпадений, но это будет первое. Вы можете изменить метод, чтобы сделать все, что вы хотите или добавить больше, и т. Д. c. в зависимости от вашего сценария.

1 голос
/ 16 января 2020

Вы можете использовать пользовательское условие

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until<bool>((d) =>
{
    return d.FindElements(firstBy).Count > 0 || d.FindElements(secondBy).Count > 0;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...