Когда я запускаю этот тест, используя одиночные учетные данные пользователя, он работает нормально и завершает оба теста. Проблема в том, что наша система позволяет пользователю вводить транзакцию каждые 10 секунд (это всего лишь одна из наших функций безопасности, позволяющая избежать обновления или многократной отправки транзакций). В любом случае, как лучше всего использовать несколько учетных данных пользователя? Я пробовал несколько логик, которые придумал, но каждый раз Firefox будет использовать имя пользователя1, а IE и Chrome будут использовать имя пользователя 2 или 3.
Другими словами
- Firefox = Имя пользователя1
- Chrome = Имя пользователя2
- IE = Имя пользователя2
- Firefox = Имя пользователя1
- Chrome = Имя пользователя3
- IE = Имя пользователя3
Поэтому одним из решений было создание отдельных классов входа для каждого браузера, а также отдельных классов входа. Классы транзакций для каждого браузера. И в тестировании я запустил соответствующие классы для каждого браузера. Я думаю, что это плохое решение, хотя оно работает.
Другое решение, которое я придумал, заключалось в том, чтобы взять метод проверки входа в систему и поместить его в каждый оператор if() в методе параметров класса Transaction, когда он проверяет каждый браузер. Тогда каждый оператор if будет иметь свое правильное имя пользователя.
Но мне это решение также не нравится, потому что мне придется добавить этот же код во все будущие тестовые классы, которые я создам, если я запускаю один тест для проверки нового кода для разрабатываемой функции. Это просто повторяющийся код, который, я думаю, должен быть в отдельном классе.
Вот классы Login и Transaction перед преобразованием в testng. Кроме того, я создал класс Environment, который содержит статические переменные, такие как имя пользователя и URL.
P.S. Я удалил кучу тестового кода, ненужного для этого вопроса.
Пример:
static {
URL = "https://website.com";
DEFAULT_WAIT_TIME = 60;
SYSTEM_ID = "IDnumber";
USERNAME = "Username1";
PASSWORD = "Password1";
}
import static org.junit.Assert.fail;
import java.util.concurrent.TimeUnit;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class Login {
private WebDriver driver;
private String baseURL;
private StringBuffer verificationErrors = new StringBuffer();
@Before
public void setUp() throws Exception {
//driver = new FirefoxDriver();
//baseURL = Environment.URL;
driver.manage().timeouts().implicitlyWait(Environment.DEFAULT_WAIT_TIME, TimeUnit.SECONDS);
}
public static void doLogin(WebDriver driver, String baseURL) {
WebDriverWait wait = new WebDriverWait(driver, Environment.DEFAULT_WAIT_TIME);
System.out.println("Log in to trunk...");
driver.get(baseURL);
wait.until(ExpectedConditions.presenceOfElementLocated(By.id("company_id")));
if (driver.findElement(By.xpath("//div[span='Log In']/span")).isEnabled()) {
System.out.println(" 1 - 'Login' page is opened");
} else {
System.out.println(" !ERROR! - Can NOT open 'Login' page");
driver.findElement(By.id("This is to throw exception if Can NOT open 'Login' page"));
}
driver.findElement(By.id("company_id")).clear();
driver.findElement(By.id("company_id")).sendKeys(Environment.SYSTEM_ID);
driver.findElement(By.xpath("//input[@name='username']")).clear();
driver.findElement(By.xpath("//input[@name='username']")).sendKeys(Environment.USERNAME);
driver.findElement(By.id("c_password")).clear();
driver.findElement(By.id("c_password")).sendKeys(Environment.PASSWORD);
System.out.println(" 2 - Info filled");
//I removed the rest of the code that finishes the login because
//I don't think it is needed for demonstration
}
@Test
public void main() {
doLogin(driver, baseURL);
}
@After
public void tearDown() throws Exception {
driver.quit();
String verificationErrorString = verificationErrors.toString();
if (!"".equals(verificationErrorString)) {
fail(verificationErrorString);
}
}
}
import static org.junit.Assert.fail;
import java.util.concurrent.TimeUnit;
import org.junit.After;
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.ie.InternetExplorerDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.support.ui.WebDriverWait;
public class Transaction {
private WebDriver driver;
private String baseURL;
private StringBuffer verificationErrors = new StringBuffer();
public static String country = "22";
public static String ammount = "500";
@Before
public void setUp() throws Exception {
// System.setProperty("webdriver.ie.driver", "../IEDriverServer.exe");
// driver = new InternetExplorerDriver();
driver = new FirefoxDriver();
baseURL = Environment.URL;
driver.manage().timeouts().implicitlyWait(Environment.DEFAULT_WAIT_TIME, TimeUnit.SECONDS);
}
public static void doTransaction(WebDriver driver) {
WebDriverWait wait = new WebDriverWait(driver, Environment.DEFAULT_WAIT_TIME);
System.out.println("Performing transaction...");
// This is where the transaction code is ......
}
@Test
public void transaction() {
//Login first
Login.doLogin(driver, baseURL);
// Transaction
doTransaction(driver);
}
@After
public void tearDown() throws Exception {
driver.quit();
String verificationErrorString = verificationErrors.toString();
if (!"".equals(verificationErrorString)) {
fail(verificationErrorString);
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/292 ... ser-log-in
Мобильная версия