用C#创建我自己的事件

时间:2015-06-11 11:57:00

标签: c# selenium-webdriver

我正在使用selenium自动化一个网站,该网站有一个登录和一系列用户应该填写的表格。我在" if-block"中设计了我的文档就绪状态。但是,我希望这是一个事件,以便它与默认Web浏览器控件的webbroswer_documentcompleted事件类似。

我希望每次在我的代码中满足条件时都会引发一个事件。 此外,我希望活动一次。到目前为止,我只能从事件中引发手动事件(即在事件发生后检查事件) 我如何创建此活动。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System.Windows.Forms;

namespace Faster_Ticket_Attempt
{
   public  class WebBrowser
   {         
      public static void Main(String[] args)
      {
          IWebDriver driver = new ChromeDriver();
          driver.Navigate().GoToUrl("SOME URL");
          if (((IJavaScriptExecutor)driver).ExecuteScript("return document.readyState").Equals("complete"))
          {
                MessageBox.Show("we are ready");
          }
      }
   }
}

2 个答案:

答案 0 :(得分:0)

首先,您需要一个代表您的事件处理程序的委托:

public delegate void YourEventHandler(<your parameters, e.g. some EventArgs>);

然后,您必须声明事件:

public event YourEventHandler YourEvent;

最后,为了举起事件,你只需要调用它(但是,如果首先附加任何事件处理程序,请检查它):

if (YourEvent!= null)
    YourEvent(<your event parameters>);

另请参阅:https://msdn.microsoft.com/de-de/library/8627sbea.aspx

答案 1 :(得分:0)

(static) event Action webbroswer_documentcompleted;

(static) void webbroswer_documentcompleted_handler()
{
   ... do something
}

代码类型中的某处:

webbroswer_documentcompleted += webbroswer_documentcompleted_handler;
if(condition) webbroswer_documentcompleted();  // throw your event here

将委托Action更改为其他委托,例如EventHandler,以防您需要事件处理程序来接受参数。

您也可以使用lambda运算符,如下所示:

webbroswer_documentcompleted += () = >
{
   ... do something
};