我试图使用dataprovider检查登录页控件,但我不想为每个用户名密码控件反复初始化webdriver。一旦我进入登录页面,在不启动另一个驱动程序的情况下一次检查登录页面上所有相关的场景对我来说似乎更方便,但我想不通。在运行以下代码时,数据[0][0]和数据[0][1]被正确检查,但在尝试键入数据[1][0]和数据[1][1]时,它在具有第二优先级测试注解的登录方法上没有给出此类元素。可能是因为当时驱动程序并没有在看那个页面。我如何处理这个问题?
错误:
org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//div[@class='q-input-wrapper email-input']//input[@class='q-input']"}
代码:
public class TestCaseFirst {
public WebDriver driver;
@BeforeTest
public void Start() throws InterruptedException {
WebDriverManager.chromedriver().setup();
driver= new ChromeDriver();
driver.get("https://www.faxzas.com/");
driver.manage().window().maximize();
Thread.sleep(2000);}
@Test(priority=1)
public void RoadtoLogin() throws InterruptedException {
driver.findElement(By.xpath("//a[@title='Close']")).click();
Thread.sleep(1000);
driver.findElement(By.xpath("//div[@class='login-container']//span[@id='not-logged-in-container']")).click();;
Thread.sleep(1000);
}
@Test(dataProvider="loginInfos", priority=2)
public void Login(String mail, String password) throws InterruptedException {
driver.findElement(By.xpath("//div[@class='q-input-wrapper email-input']//input[@class='q-input']")).sendKeys(mail);
Thread.sleep(1000);
driver.findElement(By.xpath("//div[@class='q-input-wrapper']//input[@class='q-input']")).sendKeys(password);
Thread.sleep(1000);
driver.findElement(By.xpath("//button[@type='submit']")).click();
Thread.sleep(1000);
String description = driver.findElement(By.xpath("//div[@id='error-box-wrapper']//span[@class='message']")).getText();
System.out.println(description);
}
@DataProvider(name="loginInfos")
public Object[][] getData(){
Object[][] data = new Object[6][2];
data[0][0]="blackkfredo@gmail.com";
data[0][1]="";
data[1][0]="blackkfredo@gmail.com";
data[1][1]="443242";
data[2][0]="";
data[2][1]="1a2b3c4d";
data[3][0]="";
data[3][1]="";
data[4][0]="blackkfredogmail.com";
data[4][1]="1a2b3c4d";
data[5][0]="blackkfredo@gmail.com";
data[5][1]="1a2b3c4d";
return data;
}
}
1条答案
按热度按时间zbsbpyhn1#
您需要将您的页面重置为您所期望的元素所在的登录页面。要么放一个@aftermethod,然后返回到您要测试的页面,要么放一个@beforethod。您甚至可能希望结束find元素调用,并通过返回主页来处理异常。