我正试图找出在Selenium c#中处理网页上元素的方法,同时尝试新的东西,我不想为每次新的尝试重新打开浏览器。
所以我在我的代码中设置了一个断点,在页面打开后的那个点。然后我试图在即时窗口中编写一些Selenium代码。然而,即使是在即时窗口中一个单一的点击调用也会得到:
求值需要线程暂时运行。使用"观察"窗口执行计算。
Google说这是因为我试图运行的代码(driver.FindElementByClassName("myClass". click ())跨越一个线程,这是不允许在即时窗口。
那么我怎么能尝试一些东西与硒没有启动浏览器一遍又一遍?
您可以使用c#交互式控制台来使用Selenium API。我发现c#交互窗口可以与我的代码交互吗?,这让我想到了这段代码,你可以直接在Visual Studio中执行。
-
在Visual Studio中打开c#交互控制台(View ->其他Windows——>c#互动)。
-
加载包含Selenium代码的项目的程序集:
> #r "C:pathtoyourproject.dll"
您需要将
C:pathtoyourproject.dll
更改为计算机上DLL文件的路径。这将加载您的项目,以及项目的所有依赖项,如果您的项目将Selenium声明为其依赖项之一,则还应该加载Selenium。真的,这只是你电脑上任何DLL文件的任意路径。所以你可以从Selenium相关的NuGet包中加载WebDriver.dll和WebDriver.Support.dll。修改路径。
如果您为Visual Studio项目加载DLL文件,您还可以使用该项目中定义的任何类型,其中可以包括Selenium页面模型类。
-
为常用的Selenium命名空间添加一些
using
指令:> using OpenQA.Selenium; > using OpenQA.Selenium.Support.UI;
这将节省一些输入,它的工作原理就像c#类文件顶部的
using
指令。 -
初始化并使用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
目录之一。