在Selenium中为单个任务在头部和无头之间切换

时间:2016-01-04 07:04:48

标签: selenium testing automated-tests

在Selenium的任务中,有没有办法从无头转向头? 例如,我运行一些无头工作流程,但在中间我希望用户能够按下按钮以查看实际浏览器窗口的外观。我该怎么做?

4 个答案:

答案 0 :(得分:0)

不幸的是,通过selenium在UI(头部)和HeadLess执行之间切换不可能

例如,Selenium创建了一个WebDriver类型的浏览器实例(Firefox / Chrome / IE / HtmlUnit)。 Selenium只能在它创建的实例上运行,并且在创建期间,如果它是UI测试(Firefox / Chrome / IE)或Headless(HtmlUnit),它将被定义。

因此,根据您的要求,Selenium的设计可以防止在测试过程中无头/ UI执行之间切换。

答案 1 :(得分:0)

使用xvfb即可完成此操作。您可以使用任何驱动程序开发测试,因此,在配置xvfb之后,您只需要使用

xvfb-run tests
如果你不想要,你可以运行没有xvfb参数的测试。

Linux机器需要使用xvfb。

答案 2 :(得分:0)

我为我的一项日常任务做了这件事 - 登录防火墙。这是一个2FA进程,需要组合浏览器交互和(随机生成的)令牌。对于第一部分,一个简单的PowerShell脚本在无头模式下运行,因此当站点提示您的令牌时,它会将IE变为可见并等待用户输入。如果提供了此类,则再次切换到无头并完成该过程。使用dialog message box通知用户操作成功/失败。

您可以从这样简单的IE automation开始,稍后优化您的.ps1脚本。我在以后使用的解决方案:

$ie = new-object -ComObject "InternetExplorer.Application"
$requestUri = http://-your-site-here
# switch the browser headless mode on/off
#$ie.visible = $true
$ie.silent = $true
$ie.navigate($requestUri)
while($ie.Busy) { Start-Sleep -Milliseconds 100 }
# get DOM in order to interact 
$doc = $ie.Document
$userInputId = "your-uname-id-here"
$doc.getElementsByTagName("input") | % {
    if ($_.id -ne $null){
        if ($_.id.Contains($userInputId)) { $_.value = "your-username-here" }
    }
}

# can call JS events on elements
# like $btn.click()
Write-Verbose "Login Complete"

答案 3 :(得分:0)

不可能。

但是可以从屏幕上隐藏浏览器窗口:):

driver.Manage().Window.Position =new Point(-2000, 0);