Как проверить, действительно ли клик что-то сделал, или альтернативное решение - PullRequest
0 голосов
/ 25 октября 2019

Я создаю несколько тестов в Selenium, используя NUnit. У меня есть проблема с некоторыми из моих кликов, не проходящих, потому что кнопки не загружены должным образом. У меня есть ожидание, которое должно подождать, пока кнопки не станут кликабельными, но они кажутся кликабельными, прежде чем они на самом деле, и щелчок не срабатывает. Я вижу, что элемент имеет правильную ссылку href до того, как я нажму, но ничего не происходит.

Статическая задержка перед щелчком «исправляет» его, но это плохое решение, которое замедляет весь процесс тестирования и частоперерывы во время стрессовых испытанийпроверьте, что щелчок сделал что-нибудь вместо этого. Я думал о сопоставлении источника страницы до и после клика, но не все клики обязательно меняют html, так что вместо этого просто ломаются другие тесты.

Вот мой текущий метод кликов. Хотя ожидание кажется довольно бесполезным.

    public void click(IWebElement element)
    {
        IsDisplayed(element);

        Console.Write("Clicking " + element.GetAttribute("href"));

        WebDriverWait wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10));
        wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(element));

        element.Click();

        Console.WriteLine(" ✓");
    }

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

1 Ответ

0 голосов
/ 25 октября 2019

Кажется, ты был рядом. Поскольку вы вызвали WebDriverWait для ElementToBeClickable(), как только элемент будет возвращен, вам нужно вызвать click() для него. Фактически ваш кодовый блок будет:

WebDriverWait wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10));
wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(element)).Click();

Обновление

В качестве альтернативы вы можете использовать ExecuteScript() из IJavaScriptExecutor следующим образом:

WebDriverWait wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10));
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].click();", wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(element)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...