C# 在元素外部单击不起作用

C# 在元素外部单击不起作用,c#,selenium,extjs,automation,salesforce,C#,Selenium,Extjs,Automation,Salesforce,我试图从列表中选择一个元素,当在列表外单击时,该元素将更新字段。如果我只有一个事件,下面的代码可以工作(见图) 但当我有两个活动时,它将不起作用(注意,现在图片中有两个活动,一个是新活动,另一个叫做自助早餐)。我将事件名称传递给从下拉列表中单击自助早餐的方法,但是单击html仅适用于上面的图片,而不适用于下面的图片。有什么办法可以解决这个问题吗 列表的Html格式: 自助式早餐 未标记的 套餐午休 套餐 套餐午餐 套餐早间休息 尽情派对 未分配 选择选

我试图从列表中选择一个元素,当在列表外单击时,该元素将更新字段。如果我只有一个事件,下面的代码可以工作(见图)

但当我有两个活动时,它将不起作用(注意,现在图片中有两个活动,一个是新活动,另一个叫做自助早餐)。我将事件名称传递给从下拉列表中单击自助早餐的方法,但是单击html仅适用于上面的图片,而不适用于下面的图片。有什么办法可以解决这个问题吗

列表的Html格式:


  • 自助式早餐
  • 未标记的
  • 套餐午休
  • 套餐
  • 套餐午餐
  • 套餐早间休息
  • 尽情派对
  • 未分配

选择选项后,您可以尝试按坐标执行单击

action.MoveByOffset(x, y).Click().Perform();

我使用以下代码实现了单击。当有多个事件时,html标记似乎会脱落并变为远程。请检查下面的代码。我还删除了字符串参数,因为当我键入名称时,它只返回列表中的一个成员

EventGrid.FindElement(By.XPath("//li/div")).Click();
RemoteWebElement element = (RemoteWebElement)driver.FindElement(By.XPath("//html"));
var scrollIt = element.LocationOnScreenOnceScrolledIntoView;
element.Click();

据我所知,您的目标是触发
onfocusout
事件。我有这个问题,这解决了我的问题

驱动程序。通过标记名称(“body”)查找元素。发送键(keys.TAB)


它所做的是将tab键事件发送到body(如果愿意,可以使用html作为标记)。我使用此选项是因为它是实际用户最喜欢的行为。

我发现最简单的方法就是单击没有交互的东西,即body属性……这将始终存在

如果您想在测试中模拟用户行为,那么您可以单击或标记下一个字段或用户可操作元素-但是为了验证字段,下面的方法就足够了

    Class PageElements {
        public static By body = By.XPath("//body");
}
驱动程序方法:

driver.FindElement(PageElements.body).Click();

看起来你在用硒。。。你试过不同的司机吗?或者在第一次单击执行后验证html元素是否存在于EventGrid中?也许是在事前,而不是事后?另一个想法。。。可能想在点击之间使用WebDriverWait。我想这个链接会解决你的问题。单击图元时,Selenium会单击图元的中心。我建议您单击一些已知的位置,如当前行中的名称字段等,看看是否有帮助。@turgat理论上应该可以,但有时我们会使用页面的不同缩放来测试相同的测试。您可以发布下拉列表的html吗?我使用什么坐标?您可以尝试200,200开始。在这里查看接受的答案-。看起来它会显示单击的确切位置。没有运气。你真的看到单击发生的位置了吗?
driver.FindElement(PageElements.body).Click();