【问题标题】:Is there any way to do backspace twice to clear a text field using selenium webdriver through C#有没有办法通过 C# 使用 selenium webdriver 两次退格来清除文本字段
【发布时间】:2019-04-04 23:20:46
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# selenium selenium-webdriver webdriver webdriverwait


    【解决方案1】:

    谢谢大家,

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

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

    【讨论】:

    • 或者你可以做 TextSlider.send_keys(Keys.CONTROL + 'a', Keys.BACKSPACE)
    【解决方案2】:
    TextSlider.SendKeys(Keys.Backspace + Keys.Backspace);
    

    【讨论】:

      【解决方案3】:

      首先尝试修复TextSlider.Clear(); 无法正常工作的方式。我可能会出现加载问题,SendKeys 方法会起作用。尝试添加等待页面正确加载。

      如果还是不行就可以用了,

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

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-03-22
            • 1970-01-01
            • 2019-05-22
            • 1970-01-01
            • 2013-01-04
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多