有一个测试,像:
import //needed imports
public class TestClass{
WebDriver driver;
@Before
public void setUp() {
//some code
}
@Test
public void test1() {
//some code, including init of driver (geckodriver)
}
//@After
// public void tearDown() {
// driver.quit();
//}
}
Run Code Online (Sandbox Code Playgroud)
所以,我使用firefox实例,使用geckodriver并成功运行我的测试.但是我希望不要在每次运行后关闭firefox窗口,因为我只想分析我拥有的东西,并在测试运行后修复任何需要的东西(我将在稍后的unComment driver.quit()).同时,每次调用而不关闭驱动程序会导致我的PC上的RAM过度影响(并且无关紧要 - 我是否在测试后手动关闭浏览器):

所以,问题是:是否有任何方法可以关闭"geckodriver"的进程(更确切地说 - 执行smth,这将关闭taskmgr中的geckodriver.exe进程),但是在测试完成后不会关闭浏览器?例如,在测试本身添加一些方法,无论如何......这不会影响我的工作/测试本身,我只想添加一些优化.
是的,我知道两者都习惯于等待某个指定的时间。
硒:
driver.implicitly_wait(10)
Run Code Online (Sandbox Code Playgroud)
Python:
import time
time.sleep(10)
Run Code Online (Sandbox Code Playgroud)
这两者有什么区别吗?
如何用显式等待替换这种隐式等待?
驱动程序 = 新的 ChromeDriver(功能);
driver.manage().deleteAllCookies();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
这在 Before 方法中使用。我能够替换代码中的所有 Thread.sleep(),但我不确定对这个做了什么。
我是初学者。我理解等待的基本作用,但我对互联网上不同的教程如何放置和解释它感到困惑。例如,在下面的代码中,它被放置在加载 URL 之前。那么,是否只是等待 URL 加载或查找元素或两者兼而有之?如果我在 try 块中使用隐式等待一次,它是否适用于我在代码中执行的每个元素搜索?
from selenium import webdriver
driver = webdriver.Firefox()
driver.implicitly_wait(10) # seconds
driver.get("http://somedomain/url_that_delays_loading")
myDynamicElement = driver.find_element_by_id("myDynamicElement")
Run Code Online (Sandbox Code Playgroud) selenium selenium-chromedriver selenium-webdriver geckodriver implicitwait
我目前有以下设置,但我不确定我的等待(隐式和 pageLoadTimeout)是否有效。这是正确的实现吗?通过将它放在@Before("@setup") 中,它是否适用于每个场景或步骤定义运行?每次我打电话给@Given、@When.. 等时,司机会相应地等待吗?
@Before("@setup")
public void setUp() {
driver.manage().deleteAllCookies();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
}
Run Code Online (Sandbox Code Playgroud)
为什么需要给下面的wait分配一个WebElement,WebElement元素接收什么?这是正确的实现吗?——
WebDriverWait wait = new WebDriverWait(driver, 30);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(id)));
boolean status = element.isDisplayed();
Run Code Online (Sandbox Code Playgroud)