如何解决Selenium:webelement 不可交互
我正在使用 Selenium 对 Angular/C# 应用程序进行 E2E 测试。
我想用 Selenium 填写一个有棱角的材料表单。
有两个表单域:date1 和 date2
Date1 工作正常:我清除字段并填写新日期:
public void Wait(IWebDriver _webDriver,string elementString)
{
webdriverwait wait = new webdriverwait(_webDriver,TimeSpan.FromSeconds(5));
IWebElement element = wait.Until(ExpectedConditions.ElementIsVisible(By.Id(elementString) ));
}
public void test()
{
Wait(_webDriver,"date1");
for (int i = 0; i < 15; i++) {
webDriver.FindElement(By.Id("date1")).SendKeys(Keys.Backspace);
}
webDriver.FindElement(By.Id("date1")).SendKeys(DateTime.Now.AddDays(1).ToString("d"));
}
HTML 代码:
<mat-form-field class="half-width-field">
<mat-label> date1</mat-label>
<input matInput class="form-control"
formControlName="date1"
id=date1
matInput [matDatepicker]="pickerEnd"
placeholder="MM/DD/YYYY">
<mat-datepicker-toggle matSuffix [for]="pickerEnd"></mat-datepicker-toggle>
<mat-datepicker #pickerEnd></mat-datepicker>
<mat-error *ngIf="updateProductForm.controls.date1.hasError('required')">
date1 is required
</mat-error>
<mat-error *ngIf="updateProductForm.controls.date1.hasError('mismatch')">
date1 must before due
</mat-error>
</mat-form-field>
<mat-form-field class="half-width-field">
<mat-label> date2 </mat-label>
<input matInput class="form-control"
formControlName="date2"
id=date2
matInput [matDatepicker]="pickerStart"
placeholder="MM/DD/YYYY">
<mat-datepicker-toggle matSuffix [for]="pickerStart"></mat-datepicker-toggle>
<mat-datepicker #pickerEnd></mat-datepicker>
<mat-error *ngIf="updateProductForm.controls.date2.hasError('required')">
date2 is required
</mat-error>
<mat-error *ngIf="updateProductForm.controls.date2.hasError('mismatch')">
date2 must before due
</mat-error>
</mat-form-field>
当我尝试使用 date2 执行此操作时,出现 notinteractable
异常。
我使用等到可见(并尝试也可点击和延迟 10 秒。
webDriver.FindElement(By.Id("date2")).displayed
结果为真?
出了什么问题?
解决方法
有一个 Clear()
方法可用于 Selenium 中的 WebElement - C# 绑定。
所以不是这个:
for (int i = 0; i < 15; i++) {
webDriver.FindElement(By.Id("date1")).SendKeys(Keys.Backspace);
}
只需删除循环并使用 Clear()
方法
webDriver.FindElement(By.Id("date1")).Clear()
并且显示第二个日期输入字段。您可以尝试先点击,然后清除,然后发送密钥。
webDriver.FindElement(By.Id("date2")).Click();
webDriver.FindElement(By.Id("date2")).Clear();
webDriver.FindElement(By.Id("date2")).SendKeys("New date here");
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。