System.Reflection.TargetInvocationException:调用目标抛出了异常

时间:2018-04-29 18:40:32

标签: c# reactjs selenium selenium-webdriver protractor-net

我正在尝试自动化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单击结果相同的元素。

1 个答案:

答案 0 :(得分:2)

等待元素通过 WebDriverWait ExpectedConditions 方法 ElementIsVisible ,如下一步所示,您正在调用Click()所以而不是 ElementIsVisible 方法,您需要调用ElementToBeClickable方法,如下所示:

public void saveSection()
{
    WebDriverWait wait = new WebDriverWait(ngdriver, TimeSpan.FromSeconds(30));         
    wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("//*@id='btnSubmit']"));
    btnsave.Click();
}