在元素外部单击不起作用

Clicking outside an element does not work

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

Actions action = new Actions(driver);
EventGrid.FindElement(By.XPath("//div[contains(.,'" + nameToBeClicked + "')]")).Click();
// Forces a click outside element to fire the triggers
EventGrid.FindElement(By.XPath("//html")).Click();

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

Html 个列表:

<div id="boundlist-1193" class="x-boundlist x-boundlist-floating x-layer x-boundlist-default x-border-box" tabindex="-1" style="right: auto; left: 100px; top: 97px; height: auto; width: 150px; z-index: 29001;" data-selenium-id="EventGrid-EventClassificationName-list">
  <div id="boundlist-1193-listEl" class="x-boundlist-list-ct x-unselectable" style="overflow: auto; height: auto;" role="presentation">
    <ul class="x-list-plain">
      <li class="x-boundlist-item" unselectable="on" role="option">
        <div>Buffet Breakfast</div>
      </li>
      <li class="x-boundlist-item" unselectable="on" role="option">
        <div>NotMarkedAsPosted</div>
      </li>
      <li class="x-boundlist-item" unselectable="on" role="option">
        <div>Package Afternoon Break</div>
      </li>
      <li class="x-boundlist-item" unselectable="on" role="option">
        <div>Package Dinner</div>
      </li>
      <li class="x-boundlist-item" unselectable="on" role="option">
        <div>Package Lunch</div>
      </li>
      <li class="x-boundlist-item" unselectable="on" role="option">
        <div>Package Morning Break</div>
      </li>
      <li class="x-boundlist-item" unselectable="on" role="option">
        <div>Party Hard</div>
      </li>
      <li class="x-boundlist-item" unselectable="on" role="option">
        <div>Unassigned</div>
      </li>
    </ul>
  </div>
</div>

您可以在选择选项后尝试按坐标执行点击。

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

我用下面的代码实现了点击。似乎当有多个事件时,html 标签脱落并变得遥远。请查看下面的代码。我还删除了字符串参数,因为当我键入名称时它只是列表的一个成员 returns.

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

据我了解,您的 objective 是触发 onfocusout 事件。我遇到了这个问题,这解决了我的问题

driver.find_element_by_tag_name('body').send_keys(Keys.TAB)

它所做的是将 Tab 键事件发送到主体,(如果您愿意,可以使用 html 作为标签)。我使用这个解决方案是因为它是实际用户最喜欢的行为。

我发现最简单的方法就是单击没有交互的东西,即 body 属性......它会一直存在。

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

    Class PageElements {
        public static By body = By.XPath("//body");
}

驱动方法:

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