vb.net - 在这种情况下如何避免后期绑定?
问题描述
这是一个单一类别、单一形式的袖珍应用程序,可导航到特定网站、登录并为我们下载放置在那里的文件。只支持 Chrome 一切都很好,但我们办公室的用户可以使用 Chrome 或 Firefox,所以我不得不以这种方式适应。
Public Class Form1
Private browser As Object
Private Sub doLogin()
Me.ToolStripStatusLabel1.Text = "Logging in"
If My.Settings.UserBrowser Is BrowserChrome Then
Dim Options = New ChromeOptions
'Set options
Dim driverService = ChromeDriverService.CreateDefaultService()
driverService.HideCommandPromptWindow = True
browser = New ChromeDriver(driverService, Options)
Else
Dim Options = New FirefoxOptions
'Set options
Dim driverService = FirefoxDriverService.CreateDefaultService()
driverService.HideCommandPromptWindow = True
browser = New FirefoxDriver(driverService, Options)
End If
browser.Url = "https://www.example.com"
browser.Navigate()
现在当然browser
是后期绑定了,但是除了一直为每个浏览器复制代码之外,我不知道如何避免这里的后期绑定。
解决方案
假设这是 Selenium,那么 FirefoxDriver 和 ChromeDriver 都以 RemoteWebDriver 作为其基础,但也将 WebDriver 作为接口。
这真的很重要。
接口使您可以访问共享方法和属性,而无需知道已实现类的显式版本。并且接口被认为是早期绑定,因为可以进行方法调用,而无需搜索可能的候选方法列表,也无需使用 System.Reflection 来确定类实际上可以做什么。
Private browser As WebDriver
Private Sub doLogin()
Me.ToolStripStatusLabel1.Text = "Logging in"
If My.Settings.UserBrowser Is BrowserChrome Then
Dim Options = New ChromeOptions
'Set options
Dim driverService = ChromeDriverService.CreateDefaultService()
driverService.HideCommandPromptWindow = True
browser = New ChromeDriver(driverService, Options)
Else
Dim Options = New FirefoxOptions
'Set options
Dim driverService = FirefoxDriverService.CreateDefaultService()
driverService.HideCommandPromptWindow = True
browser = New FirefoxDriver(driverService, Options)
End If
browser.Url = "https://www.example.com"
browser.Navigate()
' Do other things...
End Sub
推荐阅读
- android - 没有测试的模块中出现“未找到测试”错误
- python - 在odoo 12中使用python的方法执行cron作业
- c++ - 如何让它沿对角线方向移动?
- git - 如何启用我的 Azure 管道以使用 Git 签出子模块?
- html - 在 Linux 中使用 rmarkdown::render 通过 r 和 .rmd 创建一个 html
- java - 嵌套异常是 java.time.format.DateTimeParseException: Text '3030821'
- apache-spark - 推荐什么 - 在 spark 表中保留空列表/数组与 Null?
- jquery - 如何在 jquery 中触发 Ag-Grid Resize
- r - 引用 R 中上一行的 For 循环
- c - mmap中的偏移量有什么用?