Zugriff auf Methode anderer Klasse

sinoptik

Mitglied
Hallo Zusammen,

kann mir einer erklären, was ich falsch mache? Und zwar geht es um folgendes. Ich bin gerade dabei ein paar Seleniumtests in Java zu erstellen.
Dabei wiederholen sich einige Methoden. Dies möchte ich verhindern, damit der Code nicht unnötig lang ist.

Ich habe zwei Klassen: class SeleniumMethods (enthält eine Methode, die wiederholt benötigt wird) und class testSearching (enthält Testcode)

Java:
package Testcases;

public class testSearching {

	private Selenium selenium;
	
	SeleniumHelper sm = new SeleniumMethods(selenium);


	@BeforeTest
	public void startSelenium() {
		selenium = new SeleniumStarter().getSelenium();
		selenium.start();
	}

	
	@Test
	public void testSearch() throws InterruptedException {
		selenium.open("/");
		selenium.waitForPageToLoad("30000");
		selenium.type("q", "Software");
		selenium.click("//button[@value='submit']");
		
		
		sm.checkTextPresent("Software");
	}	
}


Java:
package Testcases;

public class SeleniumMethods {
	
	public Selenium selenium;
	
	public SeleniumMethods (Selenium selenium) {
		this.selenium = selenium;
	}
	
		public void checkTextPresent(String text) throws InterruptedException {
			
			for (int second = 0;; second++) {
				try { selenium.isTextPresent(text); break; } catch (Exception e) {}
				if (second >=30) fail ("timeout"); 
				Thread.sleep(1000);
			}
		}
}

Wenn ich testSearching abspiele kommt folgender Fehler:

FAILED: testSearch
java.lang.AssertionError: timeout
at Testcases.SeleniumMethods.checkTextPresent(SeleniumMethods.java:15)
at Testcases.testSearching.testSearch(testSearching.java:25)


Es ist auch nicht so, dass er diesen Text "Software" nicht findet, denn alles funktioniert bestens, wenn ich diese Methode innerhalb der testSearching-Klasse platziere, also so:

Java:
  ......

@Test
	public void testSearch() throws InterruptedException {
		selenium.open("/");
		selenium.waitForPageToLoad("30000");
		selenium.type("q", "Software");
		selenium.click("//button[@value='submit']");
		
		for (int second = 0;; second++) { 
			try { selenium.isTextPresent("Software"); break; } catch (Exception e) {}
			if (second >=10) fail ("timeout");
			Thread.sleep(1000);
		}

Für Ratschläge bedanke ich mich im Voraus.
vg sinoptik
 
Zuletzt bearbeitet:

nrg

Top Contributor
@TO: ziemlich schwer lesbarer Code..
Nur um auszuschließen, dass du SeleniumMethods nicht mit dem falschen Objekt instanziierst, probier mal:

Java:
	 @Test
	    public void testSearch() throws InterruptedException {
	        selenium.open("/");
	        selenium.waitForPageToLoad("30000");
	        selenium.type("q", "Software");
	        selenium.click("//button[@value='submit']");
	        
	        sm = new SeleniumMethods(selenium);
	        sm.checkTextPresent("Software");
	    }[/Java]
 
Zuletzt bearbeitet:

sinoptik

Mitglied
@nrg: Vielen Dank, das ist es. Jetzt funktioniert es.
Noch ne Frage: muss ich jetzt in jeder Methode
Java:
 "sm = new SeleniumMethods(selenium)"
benutzen?
 

nrg

Top Contributor
Java:
    private Selenium selenium;
    
    SeleniumHelper sm = new SeleniumMethods(selenium);
 
    @BeforeTest
    public void startSelenium() {
        selenium = new SeleniumStarter().getSelenium();

du deklarierst selenium und sm als Attribute und übergibst dem Konstruktor von SeleniumMethods sofort dein selenium. selenium kann aber zu diesem Zeitpunkt nur null sein. Das Verhalten war mir jetzt auch ungetestet etwas unklar, deshalb meinte ich auch, dass der Code schwer lesbar ist. Hätte auch eher eine NPE erwartet...

ich würde es dann mal so probieren:
Java:
    private Selenium selenium;
    private SeleniumHelper sm;

    @BeforeTest
    public void startSelenium() {
        selenium = new SeleniumStarter().getSelenium();
        sm = new SeleniumMethods(selenium)
        selenium.start();
    }
...

edit: aber ein bisschen Fachliteratur zu OO würde ich mir noch gönnen. Wie schon paar mal gesagt, ist der Code imho ein graus. Nicht übel nehmen :)
 

new@java

Mitglied
Hallo!

Wir haben ein ganz ähnliches Problem. Wir wollen, dass in der Klasse Spiel.java eine Methode der Klasse Willie.java aufgerufen wird. Zum Schluss soll in einem JLabel (JLabels befinden sich in der Klasse Willie) die verstrichene Zeit angezeigt werden. Das Problem ist nun: Wenn die Methode aufgerufen wird, bewegt sich der Wurm nicht mehr. Woran liegt das? Und wie kriegt man das hin, dass die Zeit in dem JLabel angezeigt wird? Was fehlt uns? Wir haben echt schon alles Mögliche ausprobiert! Hier unser Quellcode:

Java:
 import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.Timer;

public class Spiel extends JPanel implements ActionListener
{
	Willie zzz;
	
	private final int WIDTH = 300;
	private final int HEIGHT = 300;
	private final int DOT_SIZE = 10;
	private final int ALL_DOTS = 900;
	private final int RAND_POS = 29;
	private final int DELAY = 100;

	private int x[] = new int[ALL_DOTS];
	private int y[] = new int[ALL_DOTS];

	public int score = 0;
	private int dots;
	private int apple_x;
	private int apple_y;
	private int birne_x;
	private int birne_y;
	public int zeit;
	
	
	private long time = 0;

	private boolean left = false;
	private boolean right = true;
	private boolean up = false;
	private boolean down = false;
	private boolean inGame = true;

	private Timer timer;
	private Image ball;
	private Image apple;
	private Image birne;
	private Image head;

	public Spiel(Willie z)
	{
		zzz = z;
		addKeyListener(new TAdapter());
		// Hintergrundfarbe des Spielfelds
		setBackground(Color.YELLOW); 
		// Bilder einbinden, sodass spŠter €pfel, Birnen und der Wurm auf dem Spielfeld erscheinen  
		ImageIcon iid = new ImageIcon(this.getClass().getResource("koerper.png"));
		ball = iid.getImage();

		ImageIcon iia = new ImageIcon(this.getClass().getResource("apfel.png"));
		apple = iia.getImage();

		ImageIcon iib = new ImageIcon(this.getClass().getResource("birne.png"));
		birne = iib.getImage();

		ImageIcon iih = new ImageIcon(this.getClass().getResource("kopf_hoch.png"));
		head = iih.getImage();

		setFocusable(true);
		iniGame(); // ruft die Methode iniGame auf

	}

	public void iniGame()
	{

		dots = 3; //Willie hat zu Beginn 3 Kšrperteile

		for (int z = 0; z < dots; z++)
		{
			x[z] = 50 - z * 10;
			y[z] = 50;
		}

		locateApple();
		locateBirne();

		timer = new Timer(DELAY, this);
		timer.start();
	}


	public void paint1(Graphics g)
	{
		super.paint(g);

		if (inGame)
		{

			g.drawImage(birne, birne_x, birne_y, this);

			for (int z = 0; z < dots; z++)
			{
				if (z == 0)
					g.drawImage(head, x[z], y[z], this);
				else
					g.drawImage(ball, x[z], y[z], this);
			}

			Toolkit.getDefaultToolkit().sync();
			g.dispose();

		} 
		else
		{
			gameOver(g);
		}
	}

	public void paint(Graphics g)
	{
		super.paint(g);

		if (inGame)
		{

			g.drawImage(apple, apple_x, apple_y, this);

			for (int z = 0; z < dots; z++)
			{
				if (z == 0)
					g.drawImage(head, x[z], y[z], this);
				else
					g.drawImage(ball, x[z], y[z], this);
			}

			Toolkit.getDefaultToolkit().sync();
			g.dispose();

		} else
		{
			gameOver(g);
		}
	}

	public void gameOver(Graphics g)
	{
		String msg = "Game Over";
		Font small = new Font("Helvetica", Font.BOLD, 20);
		FontMetrics metr = this.getFontMetrics(small);

		g.setColor(Color.black); // Farbe der Schrift
		g.setFont(small);
		g.drawString(msg, (WIDTH - metr.stringWidth(msg)) / 2, HEIGHT / 2);
	}

	public void checkApple()
	{

		if ((x[0] == apple_x) && (y[0] == apple_y))
		{
			dots++;
			//score += 10;
			locateApple();
		}
	}
	
	//public void Punkte(Snake t)
	//{
	//	Snake ttt;
	//	ttt = t;
		//System.out.println(score);
	
//	}

	public void checkBirne()
	{

		if ((x[0] == birne_x) && (y[0] == birne_y))
		{
			dots++;
			locateBirne();
		}
	}

	public void move()
	{
		
		for (int z = dots; z > 0; z--)
		{
			x[z] = x[(z - 1)];
			y[z] = y[(z - 1)];
		}

		if (left)
		{
			x[0] -= DOT_SIZE;
		}

		if (right)
		{
			x[0] += DOT_SIZE;
		}

		if (up)
		{
			y[0] -= DOT_SIZE;
		}

		if (down)
		{
			y[0] += DOT_SIZE;
		}
	}

	public void checkCollision()
	{

		for (int z = dots; z > 0; z--)
		{

			if ((z > 4) && (x[0] == x[z]) && (y[0] == y[z]))
			{
				inGame = false;
			}
		}

		if (y[0] > HEIGHT)
		{
			inGame = false;
		}

		if (y[0] < 0)
		{
			inGame = false;
		}

		if (x[0] > WIDTH)
		{
			inGame = false;
		}

		if (x[0] < 0)
		{
			inGame = false;
		}
	}

	public void locateApple()
	{
		int r = (int) (Math.random() * RAND_POS);
		apple_x = ((r * DOT_SIZE));
		r = (int) (Math.random() * RAND_POS);
		apple_y = ((r * DOT_SIZE));
	}

	public void locateBirne()
	{
		int r = (int) (Math.random() * RAND_POS);
		birne_x = ((r * DOT_SIZE));
		r = (int) (Math.random() * RAND_POS);
		birne_y = ((r * DOT_SIZE));
	}

	public void actionPerformed(ActionEvent e)
	{

		if (inGame)
		{
			
			
			checkApple();
			checkBirne();
			checkCollision();
			move();
			zeit += DELAY/1000;
			Willie.zeitAktualisieren(zeit);
		}

		repaint();
	}
	//public void zeitAktualisieren(int zeit)
	//{

		//zeit = DELAY / 1000;
		//System.out.println();

	//}
	private class TAdapter extends KeyAdapter
	{

		public void keyPressed(KeyEvent e)
		{

			int key = e.getKeyCode();

			// Wenn auf Tastatur Pfeil nach links gedrŸckt wird und nicht nach rechts, 
			//lŠuft Willi auch nur nach links und nicht nach oben oder nach unten; 
			//und nach rechts schon gar nicht.
			if ((key == KeyEvent.VK_LEFT) && (!right))
			{
				left = true;
				up = false;
				down = false;
			}
			
			// Wenn auf Tastatur Pfeil nach rechts gedrŸckt wird und nicht nach links, 
			//lŠuft Willi auch nur nach rechts und nicht nach oben oder nach unten; 
			//und nach links schon gar nicht.
			if ((key == KeyEvent.VK_RIGHT) && (!left))
			{
				right = true;
				up = false;
				down = false;
			}
			
			// Wenn auf Tastatur Pfeil nach oben gedrŸckt wird und nicht nach unten, 
			//lŠuft Willi auch nur nach oben und nicht nach links oder nach rechts; 
			//und nach unten schon gar nicht.
			if ((key == KeyEvent.VK_UP) && (!down))
			{
				up = true;
				right = false;
				left = false;
			}
			// Wenn auf Tastatur Pfeil nach unten gedrŸckt wird und nicht nach
			// oben, lŠuft Willi auch nur nach unten und nicht nach links oder nach
			// rechts; und nach oben schon gar nicht.
			if ((key == KeyEvent.VK_DOWN) && (!up))
			{
				down = true;
				right = false;
				left = false;
			}
		}
	}
}

Java:
 import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;

import javax.swing.JLabel;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Willie extends JFrame
{
	
	public static JLabel Zeitanzeige;
	
	public Willie()
	{
		
		
		// Neues GridLayout erzeugen
		GridLayout gl = new GridLayout(1, 3);
		// Ein JPanel wird erzeugt und das GridLayout zugewiesen
		JPanel info = new JPanel(gl);
		// Das JPanel wird im BorderLayout platziert
		getContentPane().add(BorderLayout.NORTH, info);
		// Dem JPanel eine Farbe zuweisen
		info.setBackground(Color.white);

		// Neues JLabel fŸr Anzeigen erzeugen
		JLabel Zeitanzeige = new JLabel("Zeit:");
		JLabel Leben = new JLabel("Leben:");
		JLabel Punkte = new JLabel("Punkte:" + "" );
		
		// Dem JPanel die einzelnen JLabel hinzufŸgen
		info.add(Zeitanzeige);
		info.add(Leben);
		info.add(Punkte);

		// Das Spiel in der Mitte platzieren
		getContentPane().add(BorderLayout.CENTER, new Spiel(this));
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setSize(320, 340);
		setLocationRelativeTo(null);
		setTitle("Willie Wurm");

		setResizable(false);
		setVisible(true);
		
	}
	public static void zeitAktualisieren(int zeit)
	{
		Zeitanzeige.setText(Integer.toString(zeit));
	}
	public static void main(String[] args)
	{
		new Willie();
	}
	
}

Wäre super, wenn uns jemand helfen könnte!!
Danke im Voraus.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Problem mit Zugriff auf Variable bzw. get-Methode in anderer Klasse Java Basics - Anfänger-Themen 2
I Kein Zugriff auf erstelltes Objekt aus anderer Methode Java Basics - Anfänger-Themen 6
G JTabbedPane zugriff von anderer Methode Java Basics - Anfänger-Themen 2
C Zugriff auf Methode Java Basics - Anfänger-Themen 2
C Kein Zugriff auf Klassenmethoden in Main Methode Java Basics - Anfänger-Themen 23
B Klassen Zugriff auf ein Objekt einer Klasse aus einer Methode heraus Java Basics - Anfänger-Themen 4
D Zugriff auf Methode einer anderen Klasse Java Basics - Anfänger-Themen 5
R Methoden Methode der GUI-Klasse Zugriff auf Methoden der Hauptklasse Java Basics - Anfänger-Themen 9
S Vererbung Zugriff auf Methode funktioniert nicht (static/non-static) Java Basics - Anfänger-Themen 3
G Wieviel kostet der Zugriff auf Objektattribute im Vergleich zur Erstellung von vars in Methode? Java Basics - Anfänger-Themen 11
G Methoden Zugriff auf Methode.. aus einer anderen Klasse Java Basics - Anfänger-Themen 6
A Methoden Zugriff auf eingelesene Variablen in der main Methode (ohne Änderung der Parameterliste) Java Basics - Anfänger-Themen 4
Z Methoden Zugriff mit Klasse 3 auf Methode von Klasse 2 welche in Klasse 1 erzeugt wird Java Basics - Anfänger-Themen 6
U Methoden Zugriff auf Array von weiterer Methode einer Klasse, Rückgabewert Problem Java Basics - Anfänger-Themen 5
P Threads Thread und Zugriff auf externe Methode beenden Java Basics - Anfänger-Themen 4
1 OOP Zugriff auf eine Methode nur einmal die Sekunde Java Basics - Anfänger-Themen 8
S Zugriff auf Methode einer Subklasse Java Basics - Anfänger-Themen 9
L Zugriff auf Methode einer anderen Klasse -> ')' fehlt ? Java Basics - Anfänger-Themen 2
J Zugriff auf Methode Java Basics - Anfänger-Themen 3
I In unterschiedlichen Applikation Zugriff auf eine gemeinsame Anwendung? Java Basics - Anfänger-Themen 8
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
J Zugriff auf eine 2. Klasse die per UI-Designer erstellt wurde Java Basics - Anfänger-Themen 1
Encera Zugriff auf Map-Objekte Java Basics - Anfänger-Themen 3
T Zugriff auf Control anderer Klasse Java Basics - Anfänger-Themen 5
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
R TreeSet Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 8
H Zugriff verweigert Java Basics - Anfänger-Themen 5
moiss002 Umgebungsvariable Kein Zugriff auf ein Array Java Basics - Anfänger-Themen 7
B Probleme mit Zugriff auf Dateisystem Windows 10 ( jFileChooser) Java Basics - Anfänger-Themen 17
B Zugriffsmodifier, Zugriff außerhalb Package Java Basics - Anfänger-Themen 5
C Zugriff auf Attribut von Oberklasse Java Basics - Anfänger-Themen 8
P Klasse hat keinen Zugriff auf getter/setter-Methoden eines Objektes Java Basics - Anfänger-Themen 9
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
M Gettter/Setter Methoden Klassenfelder kapselung und zugriff? Java Basics - Anfänger-Themen 1
S Zugriff auf protected Fields = guter Programmierstil? Java Basics - Anfänger-Themen 11
M Pfadprobleme - Zugriff auf einen Ordner im Workspace Java Basics - Anfänger-Themen 17
ruutaiokwu Bluetooth-Zugriff, braucht es dazu plattformabhängige Libraries oder kann das Java mittlerweile selbst? Java Basics - Anfänger-Themen 10
R Zugriff auf den Index eines Arrays, welches ein Objekt ist. Java Basics - Anfänger-Themen 4
M Zugriff auf eine ArrayList in einer anderen Klasse Java Basics - Anfänger-Themen 4
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
L Methoden Zugriff <identifier> expected Java Basics - Anfänger-Themen 13
T Java - Zugriff nur mit CLASSPATH ? Java Basics - Anfänger-Themen 7
L Zugriff auf Attribute eins Objekts über ActionListener Java Basics - Anfänger-Themen 4
S Zugriff auf Objekt Java Basics - Anfänger-Themen 5
A Klassen Zugriff auf Instanzen Java Basics - Anfänger-Themen 2
N ArrayList in eigener Klasse erzeugen mit Zugriff Java Basics - Anfänger-Themen 7
J Zugriff auf Variable in anderem Programm Java Basics - Anfänger-Themen 5
Q Zugriff auf Attribute Java Basics - Anfänger-Themen 3
J Klassen Zugriff auf ein "String Array" Java Basics - Anfänger-Themen 6
H Datentypen ArrayList in ArrayList: Zugriff Java Basics - Anfänger-Themen 6
J get methoden zugriff und objekt erzeugung Java Basics - Anfänger-Themen 30
J Datenbank Zugriff Java Basics - Anfänger-Themen 24
T Zugriff auf JCheckBox Java Basics - Anfänger-Themen 8
E Netzlaufwerk Zugriff schlägt fehl Java Basics - Anfänger-Themen 11
C Group, Actor und Instanz-Zugriff, LibGDX Java Basics - Anfänger-Themen 4
S Zugriff auf Attribut einer unbekannten Klasse erhalten Java Basics - Anfänger-Themen 6
S Vererbung Zugriff auf die Basisklasse einer "zweiten" Erweiterungsklasse Java Basics - Anfänger-Themen 2
Z Threads Threads - Zugriff auf Ressourcen ohne(Lock, Synchronized) Java Basics - Anfänger-Themen 2
F Klassen Zugriff auf verschachtelte Objekte Java Basics - Anfänger-Themen 11
J Sichtbarkeit und Zugriff Java Basics - Anfänger-Themen 9
L Zugriff auf zwei Java-Quellcodes Java Basics - Anfänger-Themen 3
A OOP Zugriff auf Objekte von außen Java Basics - Anfänger-Themen 8
M Kapselung Datenkapselung Sinn direkter Zugriff? Java Basics - Anfänger-Themen 1
J JDialog Zugriff auf parent JDialog Java Basics - Anfänger-Themen 5
K Collections Zugriff auf ein bestimmtes Element in der Collection Java Basics - Anfänger-Themen 1
K ArrayList in Konstruktor - wie späterer Zugriff Java Basics - Anfänger-Themen 2
F Zugriff auf Objekt einer anderen Klasse Java Basics - Anfänger-Themen 7
P Zugriff auf Felder in ArrayList Objekten Java Basics - Anfänger-Themen 2
J Erste Schritte Zugriff auf Eigenschaft Java Basics - Anfänger-Themen 2
M MVC - Problem mit Zugriff auf Objekt Java Basics - Anfänger-Themen 4
D Zugriff auf von einer anderen Klasse erstellten Objekten Java Basics - Anfänger-Themen 5
C 5 - Zugriff verweigert Java Basics - Anfänger-Themen 1
K Zugriff auf Variabeln Wert einer Instanz Java Basics - Anfänger-Themen 4
Z Zugriff auf andere Methoden Java Basics - Anfänger-Themen 12
Z Zugriff auf Pakete Java Basics - Anfänger-Themen 5
G Zugriff zwischen Klassen Java Basics - Anfänger-Themen 15
N Problem mit Swing Textfeld und Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 6
H Kein Zugriff auf das Element einer JList möglich: Fehlermeldung Java Basics - Anfänger-Themen 2
W OOP Zugriff auf mit Objekt erstellte Struktur Java Basics - Anfänger-Themen 7
F Klassen Zugriff auf Fenster aus versch. Klassen Java Basics - Anfänger-Themen 5
M Variablen Zugriff von außerhalb eines Blockes auf eine Variable innerhalb eines Blockes Java Basics - Anfänger-Themen 2
B Klassen Zugriff auf Daten der Child-Klasse Java Basics - Anfänger-Themen 9
W Typisierte ArrayList und der Zugriff auf den Typ Java Basics - Anfänger-Themen 5
M Zugriff auf Klasse Java Basics - Anfänger-Themen 2
K Zugriff auf C: Java Basics - Anfänger-Themen 5
S Das richtige Format für den SOAP Zugriff Java Basics - Anfänger-Themen 0
S Klassen Zugriff auf Attribute einer zweiten Klasse, welche durch dritte gesettet wurden? Java Basics - Anfänger-Themen 2
N Zugriff bei Package Struktur Java Basics - Anfänger-Themen 6
M Enum: Zugriff auf Konstanten Java Basics - Anfänger-Themen 7
V Zugriff auf jProgressbar Java Basics - Anfänger-Themen 10
B Zugriff auf csv-Datei per hashmap Java Basics - Anfänger-Themen 5
G Spalte in JTable unsichtbar machen, Zugriff auf Daten ermöglichen Java Basics - Anfänger-Themen 2
T ZUgriff auf 'Werte' Java Basics - Anfänger-Themen 3
J Vererbung Zugriff auf private Variable Java Basics - Anfänger-Themen 10
C Klassen Zugriff auf Objekt anderer Klasse Java Basics - Anfänger-Themen 8
B Methoden Zugriff auf Variable ermöglichen Java Basics - Anfänger-Themen 3
M Zugriff auf Arraylist Java Basics - Anfänger-Themen 7
D Kein Zugriff auf JFrame Java Basics - Anfänger-Themen 2
K Zugriff einer Klasse auf eine andere Andere -> bad operand for binary operator Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben