我正在尝试从列表中选择一个元素,该元素将在列表外部单击时更新字段。如果我只有一个事件(见图)
,下面的代码可以工作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>
&#13;
答案 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();