此声明
WebDriver driver = new FirefoxDriver();
始终打开Firefox的新实例窗口。它不使用已经打开的firefox。
任何人都可以让我知道如何使用已经打开的firefox进行测试而不是打开一个新的吗?
答案 0 :(得分:10)
使用远程Web驱动程序 像这样。
System.Uri uri = new System.Uri("http://localhost:7055/hub");
WebDriver = new RemoteWebDriver(uri, DesiredCapabilities.Firefox());
它将使用已经打开的Firefox浏览器。 您可以在此博客文章中查看此方法的详细信息。
http://www.binaryclips.com/2016/03/selenium-web-driver-in-c-how-to.html
答案 1 :(得分:3)
要小心,因为如果驱动程序崩溃一次,那么之后必须执行的所有测试用例都会受到影响,因为他们使用相同的驱动程序,你也将共享cookie,也许已经是会话以前开过,等等。
更强大的解决方案是为每个测试用例创建一个新的WebDriver,因为这样做可以减少所有测试用例对其他测试用例的依赖。
如果激励你的原因是每个WebDriver创建的时间,也许你可以开始考虑并行运行测试用例,例如使用TestNG。
由于
答案 2 :(得分:1)
最好的方法是,扩展RemoteWebDriver并覆盖startSession方法 - :
步骤:
使用command-java -jar selenium-server-standalone-3.x.x.jar启动selenium服务器。默认情况下,您的会话从端口4444开始。
启动新的firefox会话,点击创建会话按钮,然后选择firefox浏览器。
会话开始后,复制会话ID并将其粘贴到您想要的属性文件或xml文件中。
从以下方法
中保存的文件读取会话ID@Override
protected void startSession(Capabilities desiredCapabilities) {
String sid = getSessionIDFromPropertyFile();
if (sid != null) {
setSessionId(sid);
try {
getCurrentUrl();
} catch (WebDriverException e) {
// session is not valid
sid = null;
}
}
if (sid == null) {
super.startSession(desiredCapabilities);
saveSessionIdToSomeStorage(getSessionId().toString());
}
}
答案 3 :(得分:0)
在进行测试时,您应该只将您的webdriver实例化一次,然后将其作为构造函数中其他类的参数传递。像这样:
public class Test {
WebDriver driver = new FirefoxDriver();
@Test
public void testHomePage() {
HomePage hp = new HomePage(driver);
//code here }
}
public class HomePage{
private static WebDriver driver;
public HomePage(WebDriver driver) {
this.driver = driver;}
}
答案 4 :(得分:0)
在Java中,当您说new
时,实例化了一个新对象。对于WebDriver,每个new
都是一个新的浏览器窗口。
如果您想使用相同的浏览器,请使用相同的driver
对象。
driver.get("URL PATH");
这将使用已打开的浏览器转到新的Url。
答案 5 :(得分:0)
Java示例。 首先,您需要运行Selenium服务器。
java -jar C:\selenium-server-standalone-2.53.0.jar
开始新会话(第一个脚本):
WebDriver driver = new RemoteWebDriver(
new URL("http://localhost:4444/wd/hub"),
DesiredCapabilities.firefox());
然后,重用(附加)该会话(第二个脚本):
WebDriver driver = new RemoteWebDriver(
new URL("http://localhost:7055/hub"),
DesiredCapabilities.firefox());
注意不同的端口号。