无法使用Visual Studio的即时窗口来运行Selenium API



我正试图找出在Selenium c#中处理网页上元素的方法,同时尝试新的东西,我不想为每次新的尝试重新打开浏览器。

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

求值需要线程暂时运行。使用"观察"窗口执行计算。

Google说这是因为我试图运行的代码(driver.FindElementByClassName("myClass". click ())跨越一个线程,这是不允许在即时窗口。

那么我怎么能尝试一些东西与硒没有启动浏览器一遍又一遍?

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

  1. 在Visual Studio中打开c#交互控制台(View ->其他Windows——>c#互动)。

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

    > #r "C:pathtoyourproject.dll"
    

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

    真的,这只是你电脑上任何DLL文件的任意路径。所以你可以从Selenium相关的NuGet包中加载WebDriver.dll和WebDriver.Support.dll。修改路径。

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

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

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

    这将节省一些输入,它的工作原理就像c#类文件顶部的using指令。

  4. 初始化并使用web驱动程序:

    > 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:pathtoyourproject.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:pathtoyourproject.dll"更改为计算机上项目DLL文件的真实路径。这应该是Visual Studio项目根文件夹中的binX目录之一。