如何在C#中实现WebDriverEventListener
?
在java导入中我没有问题:
import org.openqa.selenium.support.events.AbstractWebDriverEventListener;
但是,在C#中没有看到WebDriverEventListener
,我无法实现它。
答案 0 :(得分:6)
通过使用该语言公开的标准事件机制来完成C#中的事件监听。您可以使用事件的正确签名创建方法,并将其附加到事件。示例方法如下所示:
void MyElementClickedHandler(object sender, WebElementEventArgs e)
{
Console.WriteLine("Clicked");
}
附加事件看起来像这样:
// Assumes driver is a properly created
// IWebDriver instance.
IWebDriver eventDriver = new EventFiringWebDriver(driver);
eventDriver.ElementClicked += new EventHandler<WebElementEventArgs>(MyElementClickedHandler);
在事件处理程序方法中,EventArgs
参数允许您检查与事件关联的属性。对于元素事件,EventArgs
将引用触发事件的IWebElement
。要断开事件处理程序,请使用标准C#-=
运算符。
答案 1 :(得分:3)
您必须在项目中添加Selenium.support.dll。
定义并实例化事件触发驱动程序,如下所示:
IWebDriver driver = new FirefoxDriver();
EventFiringWebDriver firingDriver = new EventFiringWebDriver(driver);
firingDriver.ElementClicked += new EventHandler<WebElementEventArgs>(firingDriver_ElementClicked);
要发生的事件:
firingDriver.findElement(By.xpath("...").click();
事件定义为:
private void firingDriver_ElementClicked(object sender, WebDriverExceptionEventArgs e) {
// do action required to handle what happens after clicking button you have mentioned.
}
答案 2 :(得分:0)
这个link给出了关于selenium事件处理的一个很好的解释:
WebDriver中的事件机制由两个主要对象组成:
EventFiringWebDriver - 普通WebDriver API的包装,但增加了对事件触发的支持。
WebDriverEventListener - 具有EventFiringWebDriver实例将触发的预定义事件的接口。
在Selenium中作为类图实现事件处理:
第1步:创建一个实现WebDriverEventListener的类。
public class DefaultWebDriverEventListener implements WebDriverEventListener {
public void beforeNavigateTo(String url, WebDriver driver) {
System.out.println("Driver will navigate to:" + url);
}
...
}
第2步:使用您创建的webdriver实例初始化事件触发驱动程序
//initalize FireFox webdriver instance
WebDriver driver = new FirefoxDriver();
//initalize event-firing driver using Firefox webdriver instance.
EventFiringWebDriver eventDriver = new EventFiringWebDriver(driver);
第3步:注册监听器
//register event listener to even-firing webdriver instance
eventDriver.register(listener);
现在,在执行selenium时,将执行所实现的类中所有已定义的事件。例如,截取异常等屏幕截图。
第4步:如果您想在selenium时停止触发事件,也可以取消注册侦听器
eventDriver.unregister(listener);
答案 3 :(得分:0)
确保正确启动Webdriver:
class WebDriverActionListener : EventFiringWebDriver
{
private IWebDriver _driver;
public WebDriverActionListener(IWebDriver _driver): base(_driver)
{
this._driver = _driver;
_driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(60));
}
protected override void OnElementClicking(WebElementEventArgs e)
{
_driver.Sync();
string type = getTypeofElement(e.Element.TagName);
base.OnElementClicking(e);
Reporter.Logtofile("Clicked on element:" +e.Element.Text + " of type:" + type,Status.Info);
_driver.Sync();
}
}
答案 4 :(得分:0)
还有另一个更简单的网站导航解决方案。
var driver = new ChromeDriver();
EventFiringWebDriver firingDriver = new EventFiringWebDriver(driver);
firingDriver.Navigating += FiringDriver_Navigating;
firingDriver.Navigated += FiringDriver_Navigated;
firingDriver.Navigate().GoToUrl(@"https://www.selenium.dev/");
private static void FiringDriver_Navigating(object sender, WebDriverNavigationEventArgs e)
{
Console.WriteLine("NAVIGATING - " + e.Url);
}
private static void FiringDriver_Navigated(object sender, WebDriverNavigationEventArgs e)
{
Console.WriteLine("SITE LOADED - " + e.Url);
}