为了进一步清晰,我添加了代码段。我正在使用Java Selenium-testng并尝试用3个帐户登录到一个网站zoho.com并验证是否成功。我已经看过一些类似的问题,但还没有找到一个解决方案,适用于我的情况。
我在@BeforeMethod中实例化了ChromeDriver。然后用first帐号登录网站,用@aftermethod关闭浏览器。我必须用Driver=new ChromeDriver重新实例化浏览器,以便在实例关闭时用一个新帐户重新登录,或者至少有一种会话id不存在的感觉。
我的问题只是驱动程序的最后一个实例正在关闭,因为我在@aftertest方法中有driver.quit。另外两个实例保留在内存中。
我也尝试过在不关闭浏览器的情况下使用相同的实例,但在这种情况下,登录选项在特定的网站上不可用,我随后的测试失败。
下面是代码以便进一步澄清
package uk.dev.test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.*;
import io.github.bonigarcia.wdm.WebDriverManager;
import java.util.concurrent.TimeUnit;
public class zohoLogin {
WebDriver driver=null;
String winHandleBefore;
@DataProvider(name ="testData")
public Object[][] loginPasswordData()
{
return new Object[][]{
{"xxx@gmail.com",new String ("somepassword")} ,
{"yyy@gmail.com",new String ("somepassword")},
{"zzz@gmail.com",new String ("somepassword")},
};
}
@Test ( dataProvider = "testData")
public void enterUserDetails(String userEmail, String userPassword) throws InterruptedException {
driver.findElement(By.xpath("//input[@id='login_id']")).sendKeys(userEmail);
System.out.println(("Running for Test data " + userEmail));
Thread.sleep(2000);
driver.findElement(By.xpath("//button[@id='nextbtn']")).click();
Thread.sleep(2000);
System.out.println("clicked on Next");
driver.findElement(by.xpath(“//input[@id='password']”)).sendkeys(userPassword);system.out.println(“输入密码”);driver.findElement(by.xpath(“//button[@id='nextbtn']//span[contains(text(),'signin')]”)).click();system.out.println(“单击登录”);Thread.Sleep(2000);
}
@BeforeMethod
public void loginZoho() throws InterruptedException
{
driver = new ChromeDriver();
driver.get("https://www.zoho.com");
System.out.println("Open the browser");
driver.findElement(By.xpath("//a[@class='zh-login']")).click();
//driver.manage().timeouts().implicitlyWait(5000, TimeUnit.MILLISECONDS);
Thread.sleep(5000);
}
@AfterMethod
public void closeBrosers() throws InterruptedException {
Thread.sleep(2000);
driver.close();
System.out.println("Close the browser");
}
@BeforeTest
public void setupBrowser()
{ WebDriverManager.chromedriver().setup();
}
@AfterTest
public void tearDown()
{
driver.quit();
}
}
附上了运行结果,可以看到2个chrome驱动程序实例。同时注意AfterMethod没有被执行。在此输入图像说明
我在selenium中使用driver.quit()方法,但也面临同样的问题。我认为问题与ChromeDriver的最新版本有关。
public static void CloseDriver()
{
if (Driver != null)
{
Driver.Quit();
Driver = null;
}
}
我甚至尝试了driver.kill(),但结果关闭了所有浏览器。
问题内容: 如果我想使用Web应用程序跟踪与每个客户端的对话状态,那么哪个更好的替代方法是使用Session Bean还是HTTP Session? 使用HTTP会话: 使用会话EJB: 在执行ServletContextListener时注册为Web应用程序侦听器: 在JSP中: 同一JSP正文中的其他地方: 在我看来,它们几乎是相同的,主要区别在于UserState实例是在前者中传输的,而在后
问题内容: 要获得答案,请向下滚动到此内容的结尾… 基本问题与多次询问相同。我有一个带有两个POJO事件和用户的简单程序-一个用户可以拥有多个事件。 用户: 注意:这是一个示例项目。我 真的 很想在这里使用Lazy抓取。 现在我们需要配置spring和hibernate,并有一个简单的basic-db.xml用于加载: 注意:我玩过CustomScopeConfigurer和SimpleThrea
我有一个问题,如果我的服务上有一个客户端调用两个方法,它就会失败,因为第二个方法中的事务没有与之关联的会话。但是,如果我将这两种方法组合到服务中,并从客户机代码中调用其中一种方法,它就会成功。 谁能给我解释一下为什么会这样? 考虑下面的代码: 所以这里发生的事情是,在我的客户机代码中(它不知道事务),如果我调用#getChildrenFor(id),我就没事了。但如果我打电话: 然后hiberna
在对PDF文档进行数字签名后,我在Apache PDFBox中关闭了PDF文档。我收到警告:
我们使用Hibernate(JPA)和Hibernate Envers来保存对象的历史。Web应用程序运行许多线程,其中一些是通过从其他应用程序调用RMI方法创建的,其中一些是由应用程序本身创建的,其中一些是为了处理超文本传输协议请求而创建的(它们生成视图)。 我们还使用视图中的开放会话模式来管理会话,因此我们的web。xml包含: 数据库是使用DAO访问的,它们都有由Spring注入的实体管理器
问题内容: 要获得答案,请向下滚动到此内容的末尾… 基本问题与多次询问相同。我有一个带有两个POJO事件和用户的简单程序-一个用户可以拥有多个事件。 用户: 注意:这是一个示例项目。我 真的 很想在这里使用Lazy抓取。 现在我们需要配置spring和hibernate,并有一个简单的basic-db.xml用于加载: 注意:我玩过CustomScopeConfigurer和SimpleThrea