当前位置: 首页 > 面试题库 >

尝试通过Selenium清除文本时发生InvalidElementStateException

苍德寿
2023-03-14
问题内容

我正在测试的Web应用程序在删除记录时需要确认。

我创建了一个测试,以输入删除此记录的有效理由。

执行此操作的代码如下:

DeleteFieldButton.
            Click();
        WaitMethods.WaitForElementToBeDisplayed(RemovalReason, 20);
        RemovalReason
            .Click();
        RemovalReason
            .Clear();
        RemovalReason
            .SendKeys("Automated Test - Delete Field");

文本框的XPath如下:

private Label RemovalReason = new Label(By.XPath("//*[@placeholder = 'Removal reason']"));

每当运行测试时,都会返回以下异常。

OpenQA.Selenium.InvalidElementStateException
HResult=0x80131500
Message=Cannot clear By.XPath: //*[@placeholder = 'Removal reason'] as it is 
not declared as a writable text element
Source=web
StackTrace:
at web.Elements.Common.Element.Clear()
at Daera.Efs.Test.E2e.PageObjects.ApplicationSummary.DeleteField(String 
FieldIDToDelete) in 
C:\Code\Local\WebApp.E2e\PageObjects\ApplicationSummary.cs:line 280
 at Test.E2e.Tests.ApplicationSummaryTest.Delete_Wider_General_Field_From_Application_Summary() in C:\Code\Local\WebApp.E2e\Tests\ApplicationSummaryTest.cs:line 45

以下是Web应用程序上元素的HTML:

<input ng-keypress="dialog.keypress($event)" md-autofocus="" ng-model="dialog.result" placeholder="Removal reason" class="ng-valid md-input ng-not-empty md-autofocus ng-touched ng-dirty ng-valid-parse" aria-label="Removal reason" id="input_22" aria-invalid="false" style="">

问题答案:

按照该HTML已经共享了<input>与元素placeholder 属性删除的原因
元素,因为你必须发送短信,你必须诱使 WebDriverWait元素可以点击 如下:

IWebElement myElem = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//input[@class='ng-valid md-input ng-not-empty md-autofocus ng-touched ng-dirty ng-valid-parse' and starts-with(@id,'input_') and @placeholder='Removal reason']")));
myElem.Click();
myElem.Clear();
myElem.SendKeys("Automated Test - Delete Field");


 类似资料:
  • 问题内容: 我进行了一些测试,检查当某些字段中的文本无效时是否出现正确的错误消息。有效性检查之一是某个textarea元素不为空。 如果此文本区域中已经有文本,我如何告诉selenium清除该字段? 就像是: 问题答案:

  • 我正试图读/写一个巨大的文本文件。但当我尝试这样做时,我得到了错误: 我的代码如下: 我尝试添加一个计数器(count),这样它可以在读取一定数量的行后刷新缓冲区。它不起作用。我知道计数器工作不正常。在执行“while”循环的特殊次数后,它不会变为零。我在while循环之前和之后添加了一个“for”循环来清空计数器,但效果不太好。 有什么建议吗?

  • 我正在使用Context.SendorderedBroadcast方法发送广播,并在到达ResultReceiver之前检查是否有人收到了广播。 下面是一段代码: 到目前为止,我只在搭载Android 2.1版本的摩托罗拉Defy手机上遇到过这种情况,但它也可能发生在其他手机上。 我在网上找不到任何关于它的参考资料,有人知道为什么会这样吗?谢谢!

  • 在chrome上,当用户单击清除按钮时,搜索输入会触发“搜索”事件。 是否有一种方法可以在Internet Explorer10上用javascript捕获相同的事件?

  • 问题内容: 从cancel方法的文档中: (松散地说,如果此方法阻止执行一个或多个计划的执行,则返回true。) 当我执行此代码时: 出乎意料的是,调试语句将输出: 这表明取消应该完成。但是,当我重新获得窗口焦点(并尝试重新安排计时器)时,应用程序因以下错误而崩溃: 我不知道如何解决此问题,并且我已经浏览了其他类似的问题,但没有任何效果。有任何想法吗? 问题答案: 您 不能 重复使用timerta

  • 问题内容: 我们希望在生产部署中缓存崩溃,但不要浪费大量时间来弄清楚这样做的系统。我的想法是将具有当前版本号的paras应用于css和js文件的末尾: 两个问题:这会有效地打破缓存吗?由于参数表明这是动态内容,因此该参数会导致浏览器从不缓存该URL的响应吗? 问题答案: 参数表示查询字符串,因此浏览器将认为这是从到的新路径。因此导致它从文件而不是从缓存加载。如你所愿。 而且,浏览器将假定下次调用时