单击元素外部不起作用

时间:2016-11-03 14:00:22

标签: c# selenium extjs automation salesforce

我正在尝试从列表中选择一个元素,该元素将在列表外部单击时更​​新字段。如果我只有一个事件(见图)

,下面的代码可以工作
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();

Notice only one event under the name catgory

但是当我有两个活动时会不起作用(注意现在图片中有两个事件,一个是新活动,另一个是自助早餐)。我将事件名称传递给方法,该方法从下拉菜单点击自助早餐,但点击html仅适用于上面的图片,但不适用于下面。任何想法如何解决这个问题?

enter image description here

列表的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>
&#13;
&#13;
&#13;

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

我使用以下代码实现了点击。似乎当有多个事件时,html标签会掉线并变得很远。请查看以下代码。我还删除了字符串参数,因为当我键入名称时,它只返回列表中的一个成员。

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

我发现最简单的方法就是点击没有交互的东西,即身体属性...这将永远存在。

如果您想模仿测试的用户行为,那么您可以单击或选项卡到下一个字段或用户可操作元素 - 但为了验证字段,以下方法就足够了。

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

驱动程序方法:

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