首页 > 解决方案 > 无法使用 Visual Studio 的即时窗口运行 Selenium API

问题描述

我正在尝试找出 Selenium C# 中处理网页上元素的方法,并且在尝试新事物时,我不想为每次新尝试从头开始打开浏览器。

因此,我在页面打开后的代码中放置了一个断点。然后我尝试在即时窗口中编写一些 Selenium 代码。然而,即使是立即窗口中的单击调用也会得到:

评估需要一个线程临时运行。使用 Watch 窗口执行评估。

谷歌说这是因为我试图运行的代码(driver.FindElementByClassName("myClass").Click())跨越一个线程,这在即时窗口中是不允许的。监视窗口给出了类似的错误。

那么如何在不一遍又一遍地启动浏览器的情况下尝试使用 selenium 呢?

标签: c#visual-studioselenium

解决方案


您可以使用 C# 交互式控制台来玩转 Selenium API。我发现C# 交互式窗口可以与我的代码交互吗?,这使我看到了可以在 Visual Studio 中直接执行的这段代码。

  1. 在 Visual Studio 中打开 C# 交互式控制台(查看 --> 其他窗口 --> C# 交互式)。

  2. 为包含您的 Selenium 代码的项目加载程序集:

    > #r "C:\path\to\your\project.dll"
    

    您需要更改C:\path\to\your\project.dll计算机上 DLL 文件的路径。这将加载您的项目以及项目的所有依赖项,如果您的项目将 Selenium 声明为其依赖项之一,则它们也应该加载 Selenium。

    实际上,这只是您计算机上任何 DLL 文件的任意路径。所以你可以从 Selenium 相关的 NuGet 包中加载 WebDriver.dll 和 WebDriver.Support.dll。只是改变路径。

    如果为 Visual Studio 项目加载 DLL 文件,还可以使用该项目中定义的任何类型,其中可能包括Selenium 页面模型类

  3. using为常见的 Selenium 命名空间添加一些指令:

    > using OpenQA.Selenium;
    > using OpenQA.Selenium.Support.UI;
    

    这将节省一些输入,并且它的工作using方式与 C# 类文件顶部的指令一样。

  4. 初始化并使用您的网络驱动程序:

    > var driver = new OpenQA.Selenium.Chrome.ChromeDriver();
    > var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
    > driver.Manage().Window.Maximize();
    > driver.Navigate().GoToUrl("http://stackoverflow.com");
    > wait.Until(d => { d.FindElement(By.LinkText("About")).Click(); return true; });
    

您可以复制并粘贴到 C# 交互式控制台的代码片段如下:

#r "C:\path\to\your\project.dll"
using OpenQA.Selenium;
using OpenQA.Selenium.Support.UI;
var driver = new OpenQA.Selenium.Chrome.ChromeDriver();
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
driver.Manage().Window.Maximize();
driver.Navigate().GoToUrl("http://stackoverflow.com");
wait.Until(d => { d.FindElement(By.LinkText("About")).Click(); return true; });

只需更改"C:\path\to\your\project.dll"为计算机上项目 DLL 文件的真实路径即可。这应该是bin\XVisual Studio 项目根文件夹中的目录之一。


推荐阅读