首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在这种情况下,如何避免延迟绑定?

在这种情况下,如何避免延迟绑定?
EN

Stack Overflow用户
提问于 2019-03-27 03:31:43
回答 2查看 71关注 0票数 -2

这是一个单类、单表单的袖珍应用程序,它可以导航到特定的网站,登录并为我们下载放置在那里的文件。只有Chrome支持一切都很好,但我们办公室的用户可以使用Chrome或Firefox,所以我不得不这样适应。

代码语言:javascript
复制
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是后期绑定的,但是除了一直向下复制每个浏览器的代码之外,我不知道如何在这里避免后期绑定。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-27 03:52:21

假设这是Selenium,那么FirefoxDriver和ChromeDriver都有RemoteWebDriver作为它们的基础,但也有WebDriver作为接口。

这才是真正重要的事情。

接口使您可以访问共享的方法和属性,而无需知道所实现的类的显式版本。和接口被认为是早期绑定的,因为可以进行方法调用,而不必搜索可能的候选方法列表,也不必使用System.Reflection来确定类实际可以做什么。

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2019-03-27 03:57:23

当一个对象是动态的或未知时,就是你的情况,只会在运行时绑定,这就是你所看到的。基本上,编译器不知道包含方法和属性的对象的类型或类型,因此它绕过了编译时检查。你能做的就是将它转换为合适的类型...

代码语言:javascript
复制
Private browser As Object = Nothing

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

    If TypeOf browser Is ChromeDriver Then
       CType(browser, ChromeDriver).Url = "https://www.example.com"
       CType(browser, ChromeDriver).Navigate()
    ElseIf TypeOf browser Is FirefoxDriver Then
       CType(browser, FirefoxDriver).Url = "https://www.example.com"
       CType(browser, FirefoxDriver).Navigate()
    End If

End Sub

或者另一种可能性。

代码语言:javascript
复制
 CType(browser, If(TypeOf browser Is ChromeDriver, ChromeDriver, FirefoxDriver)).Url = "https://www.example.com"
 CType(browser, If(TypeOf browser Is ChromeDriver, ChromeDriver, FirefoxDriver)).Navigate()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55364961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档