Пишу автотесты на связке Java+juint+selenium. После того, как отработал первый тест, драйвер не убивается. Второй тест при попытке передать данные - падает.
Конечно оочень содержательный текст, где код?
import org.junit.Before;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
import java.util.Date;
import java.io.File;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.*;
import static org.openqa.selenium.OutputType.*;
public class Auth {
public static WebDriver driver;
public static String getDataProperties(String param) throws Exception {
Properties props=new Properties();
props.load(new InputStreamReader(new FileInputStream("testing.properties"), "UTF-8"));
return props.getProperty(param);
}
@Before
public void setUp() throws Exception {
driver = new FirefoxDriver(new FirefoxProfile(new java.io.File("C://EDI3//develop//src//forTestingB2B")));
}
@Test
public void auth()throws Exception{
driver.get("тут url");
driver.findElement(By.linkText("Вход по паролю")).click();
driver.findElement(By.id("login")).click();
driver.findElement(By.id("login")).clear();
driver.findElement(By.id("login")).sendKeys("lebedev");
driver.findElement(By.name("password")).click();
driver.findElement(By.name("password")).clear();
driver.findElement(By.name("password")).sendKeys("111111");
driver.findElement(By.id("btn-login")).click();
}
}
а вот тест, который отваливается:
import org.junit.After;
import org.junit.Before;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
import java.util.Date;
import java.io.File;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.*;
import static org.openqa.selenium.OutputType.*;
public class SendDo {
public static WebDriver driver;
@Test
public void TestSendDo() throws Exception {
driver.get(тут url);
driver.getCurrentUrl();
String url = driver.getCurrentUrl();
String[] args = url.split("/");
String last = args[args.length - 1];
System.out.println(last);
}
@After
public void tearDown() {
driver.quit();
}
public static boolean isAlertPresent(FirefoxDriver driver) {
try {
driver.switchTo().alert();
return true;
} catch (NoAlertPresentException e) {
return false;
}
}
}
А почему вы решили что он должен убиваться?
В первом тесте у вас нет ничего, что сказало бы драйверу это сделать.
т.е. отсутсвтует вызов метода
driver.quit();
А во втором тесте не создается драйвер.
WebDriver driver = new FirefoxDriver();
вот я и не могу понять: в первом тесте я драйвер не убиваю, специально, чтобы второй тест передавал данные в уже запущенный экземпляр драйвера.
Но они у вас в разных классах, а передача драйвера между ними у вас не реализована.
Добавьте в первый класс метод позволяющий получить драйвер
А во втором классе извлекайте драйвер из первого и используйте
попробуйте так
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.Properties;
public class Auth {
public static WebDriver driver;
public static String getDataProperties(String param) throws Exception {
Properties props = new Properties();
props.load(new InputStreamReader(new FileInputStream("testing.properties"), "UTF-8"));
return props.getProperty(param);
}
@Before
public void setUp() throws Exception {
driver = new FirefoxDriver(new FirefoxProfile(new java.io.File("C://EDI3//develop//src//forTestingB2B")));
}
@Test
public void auth() throws Exception {
driver.get("тут url");
driver.findElement(By.linkText("Вход по паролю")).click();
driver.findElement(By.id("login")).click();
driver.findElement(By.id("login")).clear();
driver.findElement(By.id("login")).sendKeys("lebedev");
driver.findElement(By.name("password")).click();
driver.findElement(By.name("password")).clear();
driver.findElement(By.name("password")).sendKeys("111111");
driver.findElement(By.id("btn-login")).click();
}
public WebDriver getDriver() {
return driver;
}
}
import org.junit.After;
import org.junit.Test;
import org.openqa.selenium.NoAlertPresentException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class SendDo {
private Auth auth;
public WebDriver driver = auth.getDriver();
@Test
public void TestSendDo() throws Exception {
driver.get("url");
driver.getCurrentUrl();
String url = driver.getCurrentUrl();
String[] args = url.split("/");
String last = args[args.length - 1];
System.out.println(last);
}
@After
public void tearDown() {
driver.quit();
}
public static boolean isAlertPresent(FirefoxDriver driver) {
try {
driver.switchTo().alert();
return true;
} catch (NoAlertPresentException e) {
return false;
}
}
}
а вообще в вашем случае, если вам уж так сильно надо делать два теста последовательно, то второй тест следует перенести в класс к первому и сделать зависимости на выполнение, но @After нужно будет убрать, и закрывать драйвер непосредственно внутри последнего теста
Спасибо, сейчас попробую. Может быть Вы мне еще один вопросик разъясните? не хочется отдельную тему заводить. У меня JUnit не может вытащить константы из файла properties. А почему - понять не могу. Уже по разному пробовал - и в папку с тестами ложил, и как только не извращался(((
с Junit не работал, не знаю что это у него за файл такой)
по сути он похож на файл properties у TestNG
т.е. это не работает?
public static String getDataProperties(String param) throws Exception {
Properties props = new Properties();
props.load(new InputStreamReader(new FileInputStream("testing.properties"), "UTF-8"));
return props.getProperty(param);
}
да, именно. Файл он находит как я понял, но данные из него не тянет.
выдает ошибку java.lang.NullPointerException
Верно, потому что auth не инициализирован.
Попробуй сделать:
private Auth auth = new Auth();
Спасибо. Сейчас попробую.
Теперь заработало. Спасибо! Проблема только в том, что драйвер после return в первом тесте уходит на страницу авторизации при запуске второго теста.
А насчет файлов properties не подскажете? а то я так и не смог разобраться (гугл не помог), почему из него константы не тянутся.
а где этот метод у Вас вообще вызывается? может не тянет потому, что не вызываете его? )))
Ну, по сути идея метода заключалась в том, чтобы он загрузил файл properties и затем webdriver уже обращался к параметрам внутри этого файла. Но, поскольку знания в программировании на Java - минимальные, то могу сильно и много ошибаться(
Не достаточно просто его объявить!
Вот чтобы подтягивало значения строк из ключей
driver.findElement(By.id(getDataProperties(“ключ строки”))).click();