如何在selenium中访问javascript中的c变量

如何在selenium中访问javascript中的c变量,javascript,c#,selenium,selenium-webdriver,Javascript,C#,Selenium,Selenium Webdriver,在下面的代码中,我有一个变量linkLocation,我想在JavaScript代码中访问它。它显示未定义错误链接位置。如何访问JavaScript代码中的变量 IWebElement link = driver.FindElement(By.LinkText("soemtext")); String linkLocation = link.GetAttribute("href"); Console.WriteLine(linkLocation)

在下面的代码中,我有一个变量linkLocation,我想在JavaScript代码中访问它。它显示未定义错误链接位置。如何访问JavaScript代码中的变量

    IWebElement link = driver.FindElement(By.LinkText("soemtext"));
    String linkLocation = link.GetAttribute("href");             
    Console.WriteLine(linkLocation);
    ((IJavaScriptExecutor)driver).ExecuteScript("window.open(linkLocation, 'groupPage')");

我将最后一行更改为:

((IJavaScriptExecutor)driver).ExecuteScript("console.log('" + linkLocation + "'); window.open('" + linkLocation + "', 'groupPage')");

它成功了

根据我对Selenium在其他语言中如何工作的经验,我希望类似的东西能够工作:

((IJavaScriptExecutor)driver).ExecuteScript(
    "window.open(arguments[0], 'groupPage')", new Object[] { linkLocation });
我不使用C语言编写代码。希望上面的代码中没有明显的语法错误

获取作为参数传递给JavaScript代码的可选对象数组。在浏览器端,传递给ExecuteScript的内容在函数内执行,因此上述代码相当于:

function () {
    window.open(arguments[0], 'groupPage');
}

您在自我回答中显示的连接类型通常是不安全的。如果linkLocation中可能出现双引号;例如,在查询参数中,连接的字符串将是无效的JavaScript代码。

C是服务器端代码,JavaScript是客户端代码。要让他们彼此交谈,您必须实现ClientScriptManager注册。您正在传递linkLocation的文本字符串,而不是它的变量。好主意,我能够使用此方法将IWebElement方法传递给我的javascript。