[英]Sharing Driver between Step files in C#
我在項目中的步驟文件之間共享我的驅動程序時遇到問題。 我在網上做了很多谷歌搜索,並提出了一個使用 IObjectContainer 的解決方案。 我認為哪個是正確的? 但是,它似乎不起作用。 它卡住了。 我不太明白 IObjectContainer 在哪里被實例化。 下面是我的 Hooks 文件和我的步驟文件之一的代碼:
掛鈎文件:
public class RDM_Hooks
{
private IObjectContainer _objectContainer;
public RDM_Website<ChromeDriver> RDM_Website;
public void WebDriverSupport(IObjectContainer objectContainer)
{
_objectContainer = objectContainer;
}
[BeforeScenario]
public void InitWebDriver()
{
RDM_Website = new RDM_Website<ChromeDriver>();
_objectContainer.RegisterInstanceAs<RDM_Website<ChromeDriver>>(RDM_Website);
}
[AfterScenario]
public void DisposeWebDriver()
{
RDM_Website.SeleniumDriver.Quit();
RDM_Website.SeleniumDriver.Dispose();
}
}
步驟文件:
public class RDM_LoginSteps
{
private RDM_Website<ChromeDriver> RDM_Website;
public RDM_LoginSteps(RDM_Website<ChromeDriver> rdm_website)
{
RDM_Website = rdm_website;
}
[Given(@"I am on the homepage")]
public void GivenIAmOnTheHomepage()
{
RDM_Website.RDM_Homepage.VisitHomePage();
}
}
我想我在某處遺漏了一些東西,但我在網上找到的任何信息都沒有比上面的 go 更進一步,我有點迷路了。
我只是希望我所有的步驟文件共享同一個瀏覽器,這樣我就可以使用一個文件來完成我的所有登錄步驟,並在另一個文件上執行其他操作。
這是我使用 UI 測試的 Hook 文件
[Binding]
internal sealed class WebHooks
{
private readonly IObjectContainer _objectContainer;
public WebHooks(IObjectContainer objectContainer)
{
_objectContainer = objectContainer;
}
[BeforeScenario("web")]
public void BeforeWebScenario()
{
//HACK:
//https://stackoverflow.com/questions/43571119/loading-of-unpacked-extensions-is-disabled-by-the-administrator
var options = new ChromeOptions();
options.AddArgument("--start-maximized");
options.AddAdditionalCapability("useAutomationExtension", false);
options.AddArgument("--no-sandbox");
options.AddArgument("--whitelisted-ips=''");
//HACK: this fixes issue with not being able to find chromedriver.exe
//https://stackoverflow.com/questions/47910244/selenium-cant-find-chromedriver-exe
var webDriver = new ChromeDriver(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), options, TimeSpan.FromMinutes(15));
webDriver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(40);
_objectContainer.RegisterInstanceAs<IWebDriver>(webDriver);
}
[AfterScenario("web")]
public void AfterWebScenario()
{
var webDriver = _objectContainer.Resolve<IWebDriver>();
if (webDriver == null) return;
webDriver.Close();
webDriver.Dispose();
}
}
看起來您缺少掛鈎 class 上的 [Binding] 屬性。
我也沒有看到您在完成后從容器中獲取引用以處置它。
我不知道 RDM_Website 在做什么,但我會只參考驅動程序而不是其他任何東西來讓你保持清醒。
然后在您的步驟 class 中引用它,例如
[Binding]
public class Steps
{
private readonly IWebDriver _webDriver;
public Steps(IWebDriver webDriver)
{
_webDriver = webDriver;
}
}
BoDi 容器已經為您連接好
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.