有没有办法通过 C# 使用 selenium 网络驱动程序两次退格键来清除文本字段



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

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

我也尝试过删除,但这也不起作用。有没有办法在一行中做到这一点?

谢谢大家,

我已经设法使用 ctrl A 和删除来解决

     TextSlider.SendKeys(Keys.Control + "a");
     TextSlider.SendKeys(Keys.Delete);
TextSlider.SendKeys(Keys.Backspace + Keys.Backspace);

首先尝试修复TextSlider.Clear();如何不起作用。可能存在加载问题,发送密钥方法将起作用。尝试添加等待页面正确加载。

如果仍然不起作用,那么您可以使用,

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

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

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

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

  • 使用ElementToBeClickable Method (IWebElement)

    new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementToBeClickable(TextSlider)).Clear();
    
  • 使用ElementToBeClickable Method (By)

    new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(By.CssSelector("css_TextSlider")).Clear();
    

另一种选择是使用 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"在此代码中被调用了两次,以确保在我的测试中正确处理某些事件:在其他情况下可能不需要。

最新更新