Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.07.2018, 00:21   #1
DedPerded
Пользователь
 
Регистрация: 28.10.2016
Сообщений: 24
По умолчанию Selenium.WebDriver - Проверить наличие элемента на странице

Доброго времени суток!

Имеется кнопка, которую необходимо нажать при определенных условиях.

Она находится в блоке, который в зависимости от нажатия на данную кнопку принимает разные состояния: "is-active" и "is-not-active"

И кнопка, и "состояния" данного блока найдены при помощи CssSelector. ID, Name, ClassName - отсутствуют.

Кнопка должна быть нажата только тогда, когда блок, в котором она находится, принимает состояние "is-not-active", т.к. кнопка нажимается и по повторному клику отжимается обратно, меняя свои состояния столько, сколько душе угодно. Т.е. нажали и поехали дальше, не трогая больше её.

Код:
IWebElement button = driver.FindElement(By.CssSelector("clicksuda"));
IWebElement clicked = driver.FindElement(By.CssSelector("is-active"));
IWebElement not_clicked = driver.FindElement(By.CssSelector("is-not-active"));
В таком варианте, помимо всего прочего, выдает ошибку, т.к. элемента clicked еще нет на странице.
При использовании if выдает ошибки о неявном преобразовании...

Чем воспользоваться в таких ситуациях? И как проверить наличие необходимых элементов на странице?
DedPerded вне форума Ответить с цитированием
Старый 23.07.2018, 00:33   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

WebDriverWait

Я такую обертку использовал для удобства:
Код:
    public static class WaitHelper
    {
        public static TResult WaitUntil<TResult>(IWebDriver webDriver, TimeSpan timeout, Func<IWebDriver, TResult> condition, string message = "")
        {
            var wait = new WebDriverWait(webDriver, timeout);
            if (!String.IsNullOrEmpty(message))
                wait.Message = message;

            return wait.Until(condition);
        }

        public static TResult WaitUntil<TResult>(IWebDriver webDriver, int timeoutSec, Func<IWebDriver, TResult> condition, string message = "")
        {
            return WaitUntil(webDriver, TimeSpan.FromSeconds(timeoutSec), condition, message);
        }
    }
Код:
            WaitHelper.WaitUntil(webDriver, TimeSpan.FromSeconds(60), 
                ExpectedConditions.ElementExists(By.ClassName(".some-button")), 
                "some-button not found");
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 23.07.2018, 13:41   #3
DedPerded
Пользователь
 
Регистрация: 28.10.2016
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
WebDriverWait

Я такую обертку использовал для удобства.
Здравствуйте. Спасибо за ответ. Но вопрос был решен немного другим способом:

Код:
IWebElement button = driver.FindElement(By.CssSelector("clicksuda"));
try
{
      IWebElement clicked = driver.FindElement(By.CssSelector("is-active"));
}
catch(NoSuchElementException)
{
      Actions press = new Actions(driver);
      press.MoveToElement(button).Build().Perform();
      press.Click(button).Build().Perform();
}
DedPerded вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# Selenium Webdriver. Не удается найти элемент на сайте. Denis123456789 C# (си шарп) 4 06.11.2016 15:04
incompatible types required selenium.WebDriver supertony Общие вопросы по Java, Java SE, Kotlin 1 24.04.2016 19:05
создать линейный список и проверить наличие в данном списке заданного элемента Делька Помощь студентам 0 02.06.2015 21:19
Проверка сайтов на наличие слова на странице VitProff Работа с сетью в Delphi 12 11.10.2014 13:02
нужно проверить интерполяционным методом наличие элемента affectus Помощь студентам 0 10.06.2011 18:16