我有一个默认包含2位数值的文本字段。我想在输入新值之前清除它。我正在使用TextSlider.Clear();
,但在最新的ChromeDriver更新后,它已不再有效,因此我尝试使用退格键来解决它。目前我正在做两个退格,一次一个。
TextSlider.SendKeys(Keys.Backspace);
TextSlider.SendKeys(Keys.Backspace);
我也试过DELETE,但这也没有用。有没有办法在一行中做到这一点?
TextSlider.SendKeys(Keys.Backspace + Keys.Backspace);
首先尝试解决TextSlider.Clear();
无法正常工作的问题。可能是我的加载问题,SendKeys方法将起作用。尝试添加等待页面正确加载。
如果仍然无法工作,那么你可以使用,
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”两次以确保在我的测试中正确处理某些事件:在其他情况下可能没有必要。
谢谢你们,
我已设法使用ctrl A和Delete解决方法
TextSlider.SendKeys(Keys.Control + "a");
TextSlider.SendKeys(Keys.Delete);