我已经用谷歌搜索了答案,但如此频繁提到的.stop()对我不起作用。正在运行测试的Chrome窗口保持打开状态。

def test_getResults(self):
    sel = selenium('localhost', 4444, "*chrome", 'http://blackpearl/')
    sel.start()
    # do stuff

def tearDown(self):
    sel = selenium('localhost', 4444, "*chrome", 'http://blackpearl/')
    sel.close()
    sel.stop()


有什么想法吗?我正在将Selenium Server 2.8.0和Python 2.6一起使用,并且主要使用Chrome 14窗口进行测试。

评论

有退出方法吗?

是的,有-browser.quit();尽管当我在切换到WebDriver之前曾经运行这些类型的测试时,我曾经在TearDown中使用过它-self.selenium.stop()通常是为我做的。

好的。我将尝试.quit()。我发现.stop()将停止服务器,但不会关闭窗口。

.quit()无效

我在C#中验证了webdriver.Quit()关闭了firefox窗口,但我没有在Chrome驱动程序中尝试过。

#1 楼

driver.close()driver.quit()是在Selenium WebDriver中关闭浏览器会话的两种不同方法。
driver.close()-关闭设置焦点的浏览器窗口。
driver.quit() –它基本上调用driver.dispose方法,其中依次关闭所有浏览器窗口并正常结束WebDriver会话。
无论何时要结束程序,都应使用driver.quit()。它将关闭所有打开的浏览器窗口,并终止WebDriver会话。如果在程序末尾不使用driver.quit(),则WebDriver会话将无法正确关闭,并且不会清除内存中的文件。这可能会导致内存泄漏错误。

评论


您好Sneha Singh,欢迎来到Stack Overflow。您的答案是一个好的开始,但是您可以通过添加更多上下文来使其更好。您能描述一下driver.close和driver.quit方法之间的区别以及如何在它们之间进行选择吗?也许包括指向官方文档的链接也会有所帮助-请参阅“如何回答”中的建议。

–文斯·鲍德伦(Vince Bowdren)
16年8月18日在17:00

带有webdriver.Firefox()的wd的上下文管理器是否可以帮您退出?

–本体
19-10-27在15:34

这是一个非常老的问题,但也许我的经验会对某人有所帮助。我想关闭浏览器页面,但不关闭浏览器本身。 driver.close()未能按预期工作,因此我只是改用driver.get('about:blank')。

–史密斯(Smit Johnth)
11月4日16:57

#2 楼

您实际上是在tearDown()函数中创建第二个Selenium会话。您需要将setUp()中创建的会话放入实例变量,然后在tearDown()中关闭该会话。

class TestFoo(unittest.TestCase):
    def setUp(self):
        self.selenium = selenium('localhost', 4444, "*chrome", 'http://blackpearl/')
        self.selenium.start()

    def tearDown(self):
        self.selenium.stop()

    def test_bar(self):
        self.selenium.open("/somepage")
        #and so forth


#3 楼

我已经在Java和C#中使用了Web Driver,并且在Java中使用了

在Java中:

WebDriver driver;      
driver.quit();


在C#中:

IWebDriver Driver;
Driver.Quit();


#4 楼

在Python中,使用适用于Chrome的硒Web驱动程序,我需要在stop_client()之前调用close():在setUp()中的

from selenium import webdriver


:qbr12043q
/>
在tearDown()中:

options = webdriver.chrome.options.Options()
options.add_argument("--disable-extensions") # optional and off-topic, but it conveniently prevents the popup 'Disable developer mode extensions' 
self.driver = webdriver.Chrome(chrome_options=options)


评论


我们可以为此打电话给driver.quit()吗?

– Nam G VU
17年7月20日在2:47

#5 楼

WebDriver driver;      
driver.quit();


上面将关闭所有打开的浏览器窗口。



WebDriver driver;      
driver.close();


这将关闭当前浏览器窗口焦点。

#6 楼

使用TestNG和Java。
假定此方法位于测试类继承的某些BaseTest类中,因此请尝试以下操作:

@AfterClass(alwaysRun = true)
protected void tearDown() {
    driver.quit();
    driver = null;
}


评论


为什么最后一个命令? driver = null;

–睫毛
2014年4月30日在6:39

我在范围初始化驱动程序逻辑中使用它,例如如果为null,则正在创建新的驱动程序实例。但是,该命令是可选的。

–user1829657
2014年5月5日,11:56

#7 楼

您可以使用driver.close();driver.quit();

使用close()可以关闭一个浏览器,而quit()则可以使用webdriver关闭所有浏览器。但是为什么close()在运行时没有关闭,却在调试时关闭,我不知道。

评论


您的答案很虚弱(因为您没有提供太多其他信息),也没有为问题和现有答案增加太多。您还提出了一个不同的问题,该问题实际上应作为一个单独的问题发布(包含更多信息)

–凯特·保罗(Kate Paulk)
2014年6月4日上午10:58

#8 楼

这对我有用:

    taskkill /f /fi "pid gt 0" /im iexplore.exe


我在Visual Studio解决方案的预生成事件中拥有此功能。这可以从命令行运行,只需在您的项目中调用它,就应该设置好了。或driver.Quit()

  taskkill /f /fi "pid gt 0" /im IEDriverServer.exe


评论


您能指出提问者如何在他们的代码中和使用chrome来运行它吗?我认为他们想将其合并到套件中,而不是一次性执行

– ECiurleo
16-09-29在15:12

#9 楼

如果您使用无头模式,仍然看到它们没有关闭,请尝试以下解决方案
1)将驱动程序作为单例驱动程序

@Singleton
class BrowserInstance {

ChromeDriver getDriver(){
    ChromeOptions options = new ChromeOptions()
    options.addArguments("--headless --disable-gpu")
    return new ChromeDriver(options)
   }
}


2)使用Close并最终退出块

 finally {
        chromeDriver.close()
        chromeDriver.quit()
    }


结果:您一次只能使用一个实例,如果看到任务管理器,您将不会发现chromedriver和chrome进程挂起。

#10 楼

也许我的解决方案不是一个超级聪明的解决方案,但是在每个自动化测试用例之前,我都会先放置:
time.sleep(2)
driver = webdriver.Chrome()

driver.implicitly_wait(10)

最大化窗口
driver.maximize_window()

并关闭测试用例的所有窗口我使用:
def close():
    driver.close()
close()

这在Python中对我有效。