Selenium C#在键入之前将光标设置为输入的结尾

Selenium C#在键入之前将光标设置为输入的结尾,c#,selenium,.net-core,C#,Selenium,.net Core,将Selenium与XUnit、C#和ASP.NET Core 2.2一起使用 我有一个测试,我们想测试文本是否可以添加到输入并保存在crud操作中 我们做了以下工作: 单击一个输入web元素(称之为descriptionTextArea)//假设输入中有一个随机位置 发送结束键以将光标置于输入的末尾 向输入发送字符串 单击“保存”按钮并重新加载页面 从页面刷新中再次获取输入(称为descriptionTextArea_2) 断言文本区域的值是原始文本与末尾添加的文本连接在一起 输入的预期新值为

将Selenium与XUnit、C#和ASP.NET Core 2.2一起使用

我有一个测试,我们想测试文本是否可以添加到输入并保存在crud操作中

我们做了以下工作:

  • 单击一个输入web元素(称之为descriptionTextArea)//假设输入中有一个随机位置
  • 发送结束键以将光标置于输入的末尾
  • 向输入发送字符串
  • 单击“保存”按钮并重新加载页面
  • 从页面刷新中再次获取输入(称为descriptionTextArea_2)
  • 断言文本区域的值是原始文本与末尾添加的文本连接在一起
  • 输入的预期新值为“这是一个说明!!!!”

    但有时,这会失败,因为似乎end键没有像我想象的那样将光标移动到输入的末尾。因此,输入的实际值类似于“This is a!!!!description”,因为单击会将光标放在“a”之后,而结束键不起作用

    我可以执行assert.Contains()操作,但我希望确保生成的文本是准确的,并且可能没有添加任何内容,或者没有覆盖原始文本


    如何使selenium每次都将文本放在输入的末尾。

    您的代码很好。这可能是时间问题。由于您使用Xunit,并且由于执行速度更快,有时会发生这种情况。您可以像这样使用
    异步任务。
    一旦快速任务完成(Keys.end)然后它应该输入值。检查链接@KunduK,我已经在需要的地方使用了async wait。但是这两个方法:SendKeys()和Click()返回void,而不是Tasks(根据下面的链接)。所以我不能等他们了。这在我看来也是同步和阻塞的,因为它们是空的。您可以在每个操作中提供一些延迟`等待任务。延迟(100)`好的,我会试试,但我正在寻找一个更可靠的解决方案。理论上,这可能比我选择的延迟时间要长。
      // Assume that the descriptionTextArea has an original text of "This is a description".
      string descriptionAddition = "!!!!";
      descriptionTextArea.Click();
      descriptionTextArea.SendKeys(Keys.End); // Go to end of input text.
      descriptionTextArea.SendKeys(descriptionAddition);
    
      // Save the page and reload ...
    
      IWebElement goalDescriptionTextAfter = // same as descriptionTextArea but for new page reload 
      string newDescription = $"{originalText}{descriptionAddition}";
      Assert.Equal(newDescription, goalDescriptionTextAfter.GetAttribute("value").Trim());