首页 > 解决方案 > 在这种情况下如何避免后期绑定?

问题描述

这是一个单一类别、单一形式的袖珍应用程序,可导航到特定网站、登录并为我们下载放置在那里的文件。只支持 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是后期绑定了,但是除了一直为每个浏览器复制代码之外,我不知道如何避免这里的后期绑定。

标签: vb.netoopbinding

解决方案


假设这是 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

推荐阅读