我正在使用Selenium搜索元素并单击它们(localhost网站),有时代码运行完美,有时我会在网站加载或加载后立即收到错误。 错误:
“消息:System.InvalidOperationException:未知错误:元素
<span _ngcontent-c8="" class="ui-link-button" fxlayout="row" fxlayoutalign="start center" ng-reflect-klass="ui-link-button" ng-reflect-ng-class="[object Object]" ng-reflect-layout="row" ng-reflect-align="start center" style="flex-direction: row; box-sizing: border-box; display: flex; max-height: 100%; place-content: center flex-start; align-items: center;">...</span>
在点(219,113)处无法点击。其他元素将收到点击:<ui-spinner _ngcontent-c0="" _nghost-c1="">...</ui-spinner>
(会话信息:chrome = 63.0.3239.84) (司机信息:chromedriver = 2.34.522940
(1a76f96f66e3ca7b8e57d503b4dd3bccfba87af1),platform = Windows NT 10.0.14393 x86_64)“
我的驱动程序隐式等待60秒,所以我不认为它因为网站加载速度不够快。
public class Driver
{
public static IWebDriver driver { get; set; }
public static void WaitForElementUpTo(int seconds = 60)
{
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(seconds));
}
}
我正在使用Chrome驱动程序。
答案 0 :(得分:0)
尝试使用显式等待棒等待元素可点击
答案 1 :(得分:0)
if (intent != null && intent.getAction() != null) {
if (intent.getAction().equalsIgnoreCase(UtilAlarmConstants.ALARM_ACTION)) {
setUpNotification(context, intent);}
这表示您有一个加载微调器阻止点击您的元素。正如其他人所建议的那样,使用明确的等待:
Other element would receive the click: <ui-spinner _ngcontent-c0="" _nghost-c1="">...</ui-spinner>
答案 2 :(得分:0)
最后我使用了这个函数来等待微调器不再存在,然后继续这个场景:
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60));
wait.Until<bool>((d) =>
{
try
{
IWebElement element1 = d.FindElement(By.CssSelector(element));
return false;
}
catch (NoSuchElementException)
{
return true;
}
});
}