Есть ли способ сделать backspace дважды, чтобы очистить текстовое поле с помощью селена webdriver через C # - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть текстовое поле, которое содержит двузначное значение по умолчанию. Я хочу очистить его, прежде чем ввести новое значение. Я использовал TextSlider.Clear();, но после последнего обновления ChromeDriver он больше не работает, поэтому я пытаюсь обойти его, используя backspace. В настоящее время я делаю два возврата, по одному за раз.

TextSlider.SendKeys(Keys.Backspace);
TextSlider.SendKeys(Keys.Backspace);

Я тоже пытался УДАЛИТЬ, но это тоже не работает. Есть ли способ сделать это в одной строке?

Ответы [ 5 ]

0 голосов
/ 24 апреля 2019

Спасибо всем,

Мне удалось обойти, используя Ctrl A и Удалить

     TextSlider.SendKeys(Keys.Control + "a");
     TextSlider.SendKeys(Keys.Delete);
0 голосов
/ 10 апреля 2019

Другой вариант - очистить текстовый элемент с помощью 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 голосов
/ 05 апреля 2019

Сначала попробуйте исправить, как TextSlider.Clear(); не работает. Там может быть проблема с загрузкой, метод SendKeys будет работать. Попробуйте добавить ожидание загрузки страницы.

Если все еще не работает, вы можете использовать,

TextSlider.Click();
TextSlider.Clear();

Но ниже функционал определенно будет работать,

TextSlider.SendKeys(Keys.Backspace + Keys.Backspace);
0 голосов
/ 05 апреля 2019

Вместо использования Keys.Backspace, в идеале, чтобы очистить текстовое поле , вам нужно заставить WebDriverWait , чтобы элемент был кликабельным , и вы можете использовать либо из следующих решений:

0 голосов
/ 05 апреля 2019
TextSlider.SendKeys(Keys.Backspace + Keys.Backspace);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...