Selenium Подождите, пока Элемент, а не By - PullRequest
0 голосов
/ 24 марта 2020

День,

Я мог бы воспользоваться небольшим советом. У меня есть настройки объекта страницы, например

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

У меня есть настроенный метод, который будет 1. Дождаться, пока элемент станет видимым. 2. Проверьте правильность текста элементов.

Я пытаюсь выше сделать что-то вроде

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

, как будто идентификатор меняется, мне нужно будет отредактировать его в двух местах. Я пытаюсь создать метод расширения для 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 секунд.

Что я делаю не так?

1 Ответ

0 голосов
/ 25 марта 2020

Я попытаюсь ответить, учитывая исходную проблему, которая требовалась для проверки видимости, но для этого требовалось обновить локатор в двух местах.

Ответ безумно прост: определите поле экземпляра для локатор:

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

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

    ...
}

Затем вы можете повторно использовать это поле для проверки видимости:

WaitHelpers.WaitTillVisiible(siteInUseLocator);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...