#java
#java
Вопрос:
У меня есть 2 класса на Java, и я пытаюсь использовать результат из одного класса в качестве значения для второго класса, это то, что у меня есть.
DBCall.java —
package com.example.tests;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.concurrent.TimeUnit;
public class DBCall {
public void generateid(){
int count;
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection conn = DriverManager.getConnection("jdbc:sqlserver://IP:PORT;DatabaseName=SubscriberManager;integratedSecurity=true;");
System.out.println("Connection Successfull");
System.out.println(conn);
//--------------------------------------------------------------------
Statement stmt = conn.createStatement();
String query1= "SELECT COUNT(*) from dbo.vSubscriberReporting where [SubscriberEmailAddressStatusID] in (5,1,6,7) and [SubscriberStatusID] = 1 AND [SubscriberAddresseeStatusID] = 1 and CompanySizeCodeID IN (4)";
ResultSet rs= stmt.executeQuery(query1);
if(rs.next()) //Expecting one row.
{
count = rs.getInt(1);
System.out.println("Value: " count);
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
DBCall gen = new DBCall();
gen.generateid();
}}
QuickJavaTest.java
package com.example.tests;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
public class QucikJavaTest {
private WebDriver driver;
private String baseUrl;
private boolean acceptNextAlert = true;
private StringBuffer verificationErrors = new StringBuffer();
@Before
public void setUp() throws Exception {
driver = new FirefoxDriver();
baseUrl = "https://testurl";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
@Test
public void ConfirmValue7() throws Exception {
driver.get(baseUrl "/web/SubscriberManagement/Admin");
new Select(driver.findElement(By.id("SelectedFilter"))).selectByVisibleText("Job Title");
driver.findElement(By.id("Filters_0__Values_GB")).click();
driver.findElement(By.id("Filters_0__Values_AF")).click();
driver.findElement(By.cssSelector("button")).click();
for (int second = 0;; second ) {
if (second >= 60) fail("timeout");
try { if (isElementPresent(By.id("Filters_1__Value"))) break; } catch (Exception e) {}
Thread.sleep(1000);
}
driver.findElement(By.xpath("(//a[contains(text(),'Delete')])[2]")).click();
new Select(driver.findElement(By.id("SelectedFilter"))).selectByVisibleText("Job Function");
driver.findElement(By.cssSelector("button")).click();
for (int second = 0;; second ) {
if (second >= 60) fail("timeout");
try { if (isElementPresent(By.id("Filters_1__Values"))) break; } catch (Exception e) {}
Thread.sleep(1000);
}
driver.findElement(By.id("Filters_1__Values_28")).click();
driver.findElement(By.cssSelector("button.floatRight")).click();
driver.findElement(By.id("sqlDetailsHeading")).click();
try {
assertEquals("7", driver.findElement(By.cssSelector("span.count")).getText());
} catch (Error e) {
verificationErrors.append(e.toString());
}
}
@After
public void tearDown() throws Exception {
driver.quit();
String verificationErrorString = verificationErrors.toString();
if (!"".equals(verificationErrorString)) {
fail(verificationErrorString);
}
}
private boolean isElementPresent(By by) {
try {
driver.findElement(by);
return true;
} catch (NoSuchElementException e) {
return false;
}
}
public boolean isAcceptNextAlert() {
return acceptNextAlert;
}
public void setAcceptNextAlert(boolean acceptNextAlert) {
this.acceptNextAlert = acceptNextAlert;
}
}
что я хочу сделать, это взять значение «count» из DBCall.java и используйте его в качестве значения для проверки в assertEquals(«7») в QuickJavaTest.java , Я уверен, что это просто, я просто не могу придумать лучший способ сделать это.
Комментарии:
1. Почему бы не вернуть
int
значение изgenerateid()
?
Ответ №1:
Вам нужно вернуть значение, полученное в generateid
методе из базы данных, затем вы можете использовать его в других методах по своему усмотрению / необходимости.
Измените метод с returning void
на return int
:
public int generateid() {
int count = 0;
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection conn = DriverManager.getConnection("jdbc:sqlserver://IP:PORT;DatabaseName=SubscriberManager;integratedSecurity=true;");
System.out.println("Connection Successfull");
System.out.println(conn);
Statement stmt = conn.createStatement();
String query1= "SELECT COUNT(*) from dbo.vSubscriberReporting where [SubscriberEmailAddressStatusID] in (5,1,6,7) and [SubscriberStatusID] = 1 AND [SubscriberAddresseeStatusID] = 1 and CompanySizeCodeID IN (4)";
ResultSet rs= stmt.executeQuery(query1);
if(rs.next()) //Expecting one row.
{
count = rs.getInt(1);
System.out.println("Value: " count);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return count;
}
Затем извлеките данные в нужном методе:
@Test
public void ConfirmValue7() throws Exception {
DBCall dbCall = new DBCall();
int count = dbCall.generateid();
//use count as you want/need
//rest of your code...
}
Комментарии:
1. Я внес ваши изменения, и теперь консоль отображает — Ошибка: метод Main не найден в классе com.example.tests. DBCall, пожалуйста, определите метод main как: public static void main(String[] args) или класс приложения JavaFX должен расширять javafx.application. Приложение
2. @user3768497 ты хотя бы понимаешь, что тебе нужно делать? Вы знаете хотя бы базовый Java?
3. @user3768497 из вашего комментария кажется, что вы удалили или изменили
main
метод внутриDBCall
класса, который вообще не рассматривается в моем ответе.4. Хорошо, я увидел, в чем проблема, и исправил ее, я новичок в Java и Selenium, если у вас есть представление о ресурсах для чтения, я был бы очень рад, кстати, спасибо за всю вашу помощь 🙂
5. @user3768497 начинайте изучать по одному. Я рекомендую вам сначала изучить Java, и лучше всего следовать официальным руководствам по Java .