Есть ли способ сделать Backspace дважды, чтобы очистить текстовое поле с помощью селена веб-драйвера через C #

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

0
задан DebanjanB 5 April 2019 в 10:20
поделиться

1 ответ

Другой вариант - очистить текстовый элемент с помощью Javascript. Из-за проблем, возникающих в определенных ситуациях параллельного тестирования, я перестал полагаться на функцию SendKeys некоторое время назад. Вместо этого я использую эти функции сейчас, чтобы установить определенный текст:

    private void SetText(IWebElement element, string text, bool clearOldText)
    {
        // Clear old text if needed
        if (clearOldText)
        {
            LogInfo("Clearing " + element.ToString() + @" from any text.");
            SetElementValue(element, "");
        }

        element.Click();
        SetElementValue(element, text);
    }

    public string SetElementValue(IWebElement element, string value)
    {
        ScrollToElement(element);
        PaintElement(element, "yellow");
        var exec = (IJavaScriptExecutor)this;
        var script = @"
            var el = arguments[0];
            el.value = '" + value + @"';
            try 
            {
                if (""createEvent"" in document) {
                    var evt = document.createEvent(""HTMLEvents"");
                            evt.initEvent(""change"", false, true);
                            el.dispatchEvent(evt);
                        }
                else
                    el.fireEvent(""onchange"");
            }
            catch(err){ return err; }
            return ""Javascript executed."";
            ";
        LogInfo("Setting value to '" + value + "' for " + element.ToString());
        var result = exec.ExecuteScript(script, element);
        Recorder?.AddScreenshot();
        return result.ToString();
    }

Лично мне немного не нравится жестко закодированный JavaScript, но он всегда работал надежно. «SetElementValue» вызывается дважды в этом коде, чтобы обеспечить правильную обработку определенных событий в моих тестах: в других случаях это может не потребоваться.

0
ответ дан Tybs 5 April 2019 в 10:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: