我正在尝试自动化一个reactjs应用程序,我们的项目使用的框架建立在C#和量角器网络上。
在任何单击或断言函数之后,我收到以下错误,但代码中定义的操作成功执行。
System.Reflection.TargetInvocationException : Exception has been thrown by the target of an invocation.
----> OpenQA.Selenium.WebDriverTimeoutException : timeout
此错误的原因是什么?
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Interactions;
using OpenQA.Selenium.Support.PageObjects;
using OpenQA.Selenium.Support.UI;
using Protractor;
using System;
using System.Collections.Generic;
public Class personalinformations
{
private NgWebDriver _ngdriver;
public PersonalInformations(IWebDriver driver)
{
_ngdriver = new NgWebDriver(driver);
PageFactory.InitElements(_ngdriver, this);
_ngdriver.IgnoreSynchronization = true;
}
[FindsBy(How = How.Id, Using = "btnSubmit")]
private IWebElement btnsave { get; set; }
public void saveSection()
{
WebDriverWait wait = new WebDriverWait(ngdriver, TimeSpan.FromSeconds(30));
wait.Until(ExpectedConditions.ElementIsVisible(By.XPath("//*@id='btnSubmit']"));
btnsave.Click();
}
}
注意:在使用 Thread.Sleep(1000( 等待时,有时代码可以正常工作。我也尝试使用Javascript单击结果相同的元素。
一旦你通过WebDriverWait和ExpectConditions方法ElementIsVisible等待元素,因为在下一步中你调用Click()
所以你需要调用ElementToBeClickable方法而不是ElementIsVisible方法,如下所示:
public void saveSection()
{
WebDriverWait wait = new WebDriverWait(ngdriver, TimeSpan.FromSeconds(30));
wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("//*@id='btnSubmit']"));
btnsave.Click();
}
尝试{元素。Click((;}catch(Exception e({Console.WriteLine(e(;}
那么例外似乎逃脱了...