【问题标题】:Selenium: webelement not interactableSelenium:webelement不可交互
【发布时间】:2021-08-06 18:59:56
【问题描述】:

我正在使用 Selenium 对 Angular/C# 应用程序进行 E2E 测试。

我想用 Selenium 填写一个有角度的材料表格。

有 2 个表单域: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 结果为真?

出了什么问题?

【问题讨论】:

  • 可以分享一下网址或者html吗?

标签: angular selenium e2e


【解决方案1】:

在 Selenium - C# 绑定中有一个可用于 WebElement 的 Clear() 方法。

所以不是这个:

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"); 

【讨论】:

  • 我知道,但是 Clear() 没有用。同样在我的其他形式中它不起作用,这就是我选择这个解决方案的原因。在其他形式中,这种 for 循环解决方法确实有效。
  • 已解决,自己的问题,但有一个解决方法,使用 Tab 键(硒交互库)。
猜你喜欢
  • 2021-10-20
  • 2021-08-02
  • 2021-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-08
  • 2021-12-16
  • 2021-04-22
相关资源
最近更新 更多