是否有任何方法可以使用selenium webdriver通过C#两次退格以清除文本字段

问题描述 投票:0回答:5

我有一个默认包含2位数值的文本字段。我想在输入新值之前清除它。我正在使用TextSlider.Clear();,但在最新的ChromeDriver更新后,它已不再有效,因此我尝试使用退格键来解决它。目前我正在做两个退格,一次一个。

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

我也试过DELETE,但这也没有用。有没有办法在一行中做到这一点?

c# selenium selenium-webdriver webdriver webdriverwait
5个回答
0
投票
TextSlider.SendKeys(Keys.Backspace + Keys.Backspace);

0
投票

首先尝试解决TextSlider.Clear();无法正常工作的问题。可能是我的加载问题,SendKeys方法将起作用。尝试添加等待页面正确加载。

如果仍然无法工作,那么你可以使用,

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

但是下面的功能肯定会起作用,

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

0
投票

理想情况下,您不需要使用Keys.Backspace来清除文本字段,而是需要引导WebDriverWait才能使元素可单击,您可以使用以下任一解决方案:


0
投票

另一种选择是使用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
投票

谢谢你们,

我已设法使用ctrl A和Delete解决方法

     TextSlider.SendKeys(Keys.Control + "a");
     TextSlider.SendKeys(Keys.Delete);
© www.soinside.com 2019 - 2024. All rights reserved.