Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获得有关使用C在Selenium WebDriver中手动单击链接的通知#_Javascript_C#_Selenium - Fatal编程技术网

Javascript 获得有关使用C在Selenium WebDriver中手动单击链接的通知#

Javascript 获得有关使用C在Selenium WebDriver中手动单击链接的通知#,javascript,c#,selenium,Javascript,C#,Selenium,我用的是铬和硒。应用程序是部分自动控制的。现在,我希望用户导航到一个页面,在那里他必须从一些列表中选择一个链接,如 <ul> <li><a href="http://google.de">Google</a></li> <li><a href="http://ecosia.org">Ecosia</a></li> <li><a href="http

我用的是铬和硒。应用程序是部分自动控制的。现在,我希望用户导航到一个页面,在那里他必须从一些列表中选择一个链接,如

<ul>
    <li><a href="http://google.de">Google</a></li>
    <li><a href="http://ecosia.org">Ecosia</a></li>
    <li><a href="http://yahoo.com">Yahoo</a></li>
</ul>
但是这里的大问题是:
ElementClicked
只在Selenium使用C#触发的点击时触发。所有事件都有这个问题。例如,
Navigated
在调用
driver.Navigate().gotour(“http://stackoverflow.com“”
,但在手动单击浏览器中的链接之后

为了解决这个问题,我认为有必要转发客户端JS事件。像这样的伪代码:

$('a').click(function() {
    SeleniumBackend.NotifyAboutClickEvent('a', $(this));
});
我知道有一种方法叫做
ExecuteScript
,它允许在浏览器中运行JS。像这样直接返回似乎是可能的

string jsReturnValue = driver.ExecuteScript("return 'test';");
对于这种情况,这还不够,因为需要某种类型的回调来实现异步

object clickedLink = sharedWebDriver.ExecuteAsyncScript(@"
    var callback = arguments[arguments.length - 1];
    clickedLink('http://google.de');
");

这是可行的,这里的问题是:只有一次。我无法绑定eventhandler,它会通知我以后的单击…

看起来您正在创建初始菜单页。如果这是真的,您可以使用
onlick
事件设置JS全局变量,然后使用
JavascriptExecutor
获取变量设置,然后使用该设置确定他们单击的链接

…或者更好的是,您可以在他们单击后检测浏览器URL并知道他们去了哪里

object clickedLink = sharedWebDriver.ExecuteAsyncScript(@"
    var callback = arguments[arguments.length - 1];
    clickedLink('http://google.de');
");