当前位置: 首页 > 知识库问答 >
问题:

Selenium与chrome一起显示chrome驱动程序的控制台窗口,获取页面完成事件

上官和惬
2023-03-14
    Dim chromeOptions As New OpenQA.Selenium.Chrome.ChromeOptions()
    chromeOptions.AddExcludedArgument("ignore-certifcate-errors")
    chromeOptions.AddArgument("test-type")
    Dim driver As IWebDriver = New ChromeDriver(chromeOptions)
    driver.Navigate().GoToUrl("https://example.com")


    Dim myLink1 As IWebElement = driver.FindElement(By.Name("userName"))
    myLink1.SendKeys("username")
    Dim myLink2 As IWebElement = driver.FindElement(By.Name("password"))
    myLink2.SendKeys("mypassword")

我所做的是

Imports OpenQA.Selenium
Imports OpenQA.Selenium.Chrome
Imports OpenQA.Selenium.Support.Events

Dim service As ChromeDriverService = ChromeDriverService.CreateDefaultService
Dim driver1 As ChromeDriver = Nothing
Dim driver As EventFiringWebDriver
Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim chromeOptions As New OpenQA.Selenium.Chrome.ChromeOptions()
        chromeOptions.AddExcludedArgument("ignore-certifcate-errors")
        chromeOptions.AddArgument("test-type")
        service.HideCommandPromptWindow = True
        driver1 = New ChromeDriver(service, chromeOptions)
        driver = New EventFiringWebDriver(driver1)
        AddHandler driver.Navigated, AddressOf OnNavigated
        driver.Navigate().GoToUrl("https://example.com")
        Dim myLink1 As IWebElement = driver.FindElement(By.Name("userName"))
        myLink1.SendKeys("username")
        Dim myLink2 As IWebElement = driver.FindElement(By.Name("password"))
        myLink2.SendKeys("mypassword")
    End Sub
    Protected Sub OnNavigated(ByVal sender As Object, ByVal e As Support.Events.WebDriverNavigationEventArgs)
        MessageBox.Show("Page navaigated  " & e.Url)
    End Sub
    
End Class

页面导航后,OnNavigated函数触发,正如我所预期的。但在页面导航和填写用户名和密码之后,如果用户手动单击登录按钮,则在登录后将出现新的页面。在这个新的页面被导航的过程中,它不会触发OnNavigated。但是我想获得每个页面被导航的通知,甚至从用户输入。那么如何才能做到这一点呢?

共有1个答案

柴嘉石
2023-03-14

显示命令提示符窗口的默认行为是一个特性,而不是bug。许多人坚持使用.close()方法退出浏览器窗口,而不是使用.quit()。但是,这会关闭浏览器,但不会清除所有资源,就像退出Chromedriver.exe实例一样。因此,.NET绑定维护者做出了一个有意识的决定,以明确可执行文件何时运行,何时不运行。您可以使用类似于以下内容的代码更改此行为:

Dim service As OpenQA.Selenium.Chrome.ChromeDriverService = OpenQA.Selenium.Chrome.ChromeDriverService.CreateDefaultService()
service.HideCommandPromptWindow = True

Dim chromeOptions As New OpenQA.Selenium.Chrome.ChromeOptions()
chromeOptions.AddExcludedArgument("ignore-certifcate-errors")
chromeOptions.AddArgument("test-type")
Dim driver As IWebDriver = New ChromeDriver(service, chromeOptions)

在一篇关于StackOverflow的文章中问多个不相关的问题通常被认为是糟糕的形式,但是对于第二个问题,您是在问“我如何知道何时使用WebDriver完全加载了一个页面?”如果是这样,那么答案是,“你不需要。”或者,更准确地说,当您谈论当今大量JavaScript、支持Ajax、动态生成DOM的世界时,这个问题是没有意义的。

如果您需要确保某个元素在与它交互之前出现在页面上,您可以等待该条件。支持库(在.NET中的webdriver.support.dll程序集中)包含一个webdriverwait类,该类正是为启用该功能而设计的。

' Assumes you have a sub with a declaration like this:
' Private Sub Navigated(sender As Object, e As WebDriverNavigationEventArgs)
Dim driver As IWebDriver = New ChromeDriver(service, chromeOptions)
Dim eventDriver As New EventFiringWebDriver(driver)
AddHandler eventDriver.Navigated, AddressOf Navigated
 类似资料:
  • 问题内容: 我正在尝试运行一个ruby文件,该文件将使用seleniumwebdriver启动chrome驱动程序。我有selenium独立服务器2.35.0。和chromedriver可执行文件已安装。我正在通过运行服务器来启动 两个会话正在启动,chrome驱动程序无法启动。 这是在我使用以下文件运行文件之后 我对此并不陌生,无法找出问题所在。而且,我也试图让它无头运行,所以我正在运行Xvfb

  • 我试图运行一个ruby文件,这将启动chrome驱动程序使用selenium WebDriver。我有selenium独立服务器2.35.0。和chromedriver可执行文件安装。我通过运行来启动服务器, 这是在我使用 我对此很陌生,不知道哪里出了问题。我也试图无头运行它,所以我有Xvfb运行。有人能帮我指出我犯的错误并启动chromedriver吗? 更新: 谁能帮我弄清楚出了什么问题吗?

  • 问题内容: 我想建立一个自动化测试,所以我必须知道chrome控制台中出现的错误。 是否有一个选项来获取出现在控制台中的错误行? 为了查看控制台:右键单击页面中的某处,单击“检查元素”,然后转到“控制台”。 问题答案: 我不知道C#,但这是可以完成此工作的Java代码,希望您可以将其转换为C# 注意上面代码中的setUp方法。我们使用LoggingPreferences对象来启用日志记录。日志有几

  • 我想建立一个自动化测试系统,所以我必须知道chrome控制台中出现的错误。 有一个选项可以获取控制台中出现的错误行? 要查看控制台:右键单击页面中的某个位置,单击“检查元素”,然后转到“控制台”。

  • 问题内容: 我需要使用chrome驱动程序对整个页面进行截图,但是 部分实现了。 屏幕截图看起来像是带有正确信息的可见矩形,下面是黑色的大区域。 问题答案: 这是一个已知的错误: https://code.google.com/p/chromedriver/issues/detail?id=294 (仅适用于Chrome 驱动程序,firefox驱动程序可以正常工作)

  • 我想在VS 2010 C#中使用Selenium Web驱动程序打开Chrome浏览器,导航到某个网页,然后关闭驱动程序,但保持浏览器打开。我意识到,我将不得不手动关闭浏览器后,我同意这一点。 到目前为止我有: 我已经尝试了以下所有作为最后一行 有什么想法吗?