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