这是一个单类、单表单的袖珍应用程序,它可以导航到特定的网站,登录并为我们下载放置在那里的文件。只有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
是后期绑定的,但是除了一直向下复制每个浏览器的代码之外,我不知道如何在这里避免后期绑定。
发布于 2019-03-27 03:52:21
假设这是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
发布于 2019-03-27 03:57:23
当一个对象是动态的或未知时,就是你的情况,只会在运行时绑定,这就是你所看到的。基本上,编译器不知道包含方法和属性的对象的类型或类型,因此它绕过了编译时检查。你能做的就是将它转换为合适的类型...
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
或者另一种可能性。
CType(browser, If(TypeOf browser Is ChromeDriver, ChromeDriver, FirefoxDriver)).Url = "https://www.example.com"
CType(browser, If(TypeOf browser Is ChromeDriver, ChromeDriver, FirefoxDriver)).Navigate()
https://stackoverflow.com/questions/55364961
复制相似问题