我一直在努力编写一个清晰的仪表板步骤,清除我们称之为小部件的所有对象,如下所示:
public static void ClearDashboard(string widgetToKeep = null)
{
var widgets = Driver.FindElements(
By.XPath(
$"//div[@widget-name and descendant::span[@class='title' and text()[not(contains(., '{widgetToKeep ?? "dummyText"}'))]]]"
));
if (widgets != null)
{
foreach (IWebElement widget in widgets)
{
var closeButton = widget.FindElement(By.XPath(".//span[@class='delete']"));
closeButton.Click();
}
}
完全有效。 它使用标题返回所有span元素,我可以浏览这些元素,为每个元素获取一个span删除按钮,并删除小部件:
closeButton.Click()
除了有点偏离屏幕的窗口小部件对象。 如果窗口小部件离屏幕稍微偏离,它似乎无法找到跨度按钮。
这是例外: 用户代码未处理InvalidOperation
类型' System.InvalidOperationException'的例外情况发生在WebDriver.dll中但未在用户代码中处理
其他信息:未知错误:元素在点(951,760)处无法点击。其他元素会收到点击:
<div class="scroll" ng-class="{'getting-data': gettingNewData}" scroll-pag="">...</div>
(会话信息:chrome = 52.0.2743.116)
(驱动程序信息:chromedriver = 2.22.397933(1cab651507b88dec79b2b2a22d1943c01833cc1b),platform = Windows NT 6.1.7601 SP1 x86_64)
答案 0 :(得分:0)
在使用IJavascriptExecutor
点击之前,您应该使用滚动来覆盖每个元素,并使用WebDriverWait
等待元素点击,如下所示: -
IWait wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(3));
IJavaScriptExecutor js = Driver as IJavaScriptExecutor;
foreach (IWebElement widget in widgets)
{
var closeButton = widget.FindElement(By.XPath(".//span[@class='delete']"));
//Now scroll to this element first
js.ExecuteScript("arguments[0].scrollIntoView(true);", closeButton);
wait.Until(ExpectedConditions.ElementToBeClickable(closeButton)).Click();
}