Есть ли способ сделать backspace дважды, чтобы очистить текстовое поле с помощью selenium webdriver через С#

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

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

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


person user8710571    schedule 04.04.2019    source источник


Ответы (4)


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

мне удалось обойти это с помощью ctrl A и Delete

     TextSlider.SendKeys(Keys.Control + "a");
     TextSlider.SendKeys(Keys.Delete);
person user8710571    schedule 24.04.2019
comment
Или вы можете сделать TextSlider.send_keys(Keys.CONTROL + 'a', Keys.BACKSPACE) - person The AG; 17.06.2021

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

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

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

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

TextSlider.SendKeys(Keys.Backspace + Keys.Backspace);
person Sanjay Bhimani    schedule 05.04.2019

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

person DebanjanB    schedule 05.04.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» вызывается в этом коде дважды, чтобы обеспечить правильную обработку определенных событий в моих тестах: в других случаях в этом может не быть необходимости.

person Tybs    schedule 10.04.2019