IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Prosim o pomoc ohledne pouziti multi classes

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Pavel Stanek
Člen
Avatar
Pavel Stanek:26.1.2018 9:01

Dobry den,

jsem samouk a vytvoril jsem 3 classy kde potrebuji pro kazdou pouzit nastaveni prohlizece. Samozrejme mi to nefunguje. Pokud nakopiruji vse do jedne classy , tak to funguje. No ja to potrebuji rozdelit.
Pro nekoho to bude brnkacka.

*automated_script.java*

package test;

import org.openqa.selenium.WebDriver;


public class automated_script extends browser_settings{

        public static WebDriver driver;

        public static void main(String[] args) throws InterruptedException {

                Choose_campaign_from_dashboard newObjectChoose_campaign = new
                Choose_campaign_from_dashboard();
                newObjectChoose_campaign.ChooseCampaign();

                }
        }
*choose_campaign_from_dashboard.java*

package test;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class Choose_campaign_from_dashboard extends browser_settings{

        public static void ChooseCampaign() throws InterruptedException {

                // Login page
                WebDriverWait wait = new WebDriverWait(driver, 9000);
                wait.until(ExpectedConditions.visibilityOfElementLocated(By.name("loginfmt")));
                driver.findElement(By.name("loginfmt")).sendKeys("[email protected]");

                // Click on the button Next

                driver.findElement(By.id("idSIButton9")).click();

                wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("aadTitleHint")));

                // Press Enter key

                driver.findElement(By.id("aadTitleHint")).click();
        }
}
*browser_settings.java*

package test;

import java.util.logging.Level;
import java.util.logging.Logger;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.DesiredCapabilities;

public class browser_settings {

        public static WebDriver driver;

        public void openMain() throws InterruptedException {
                Logger.getLogger("org.openqa.selenium.remote").setLevel(Level.OFF);
                System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe");

                ChromeDriver driver = new ChromeDriver();
                ChromeOptions options = new ChromeOptions();
                options.addArguments("--incognito");
                DesiredCapabilities capabilities = DesiredCapabilities.chrome();
                capabilities.setCapability(ChromeOptions.CAPABILITY, options);

                driver.get("https://www.google.com");

                // Maximize window
                driver.manage().window().maximize();

                }
        }

Po spusteni automated_scrip­t.java dostanu

Exception in thread "main" java.lang.NullPointerException
        at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:787)
        at org.openqa.selenium.support.ui.FluentWait.<init>(FluentWait.java:96)
        at org.openqa.selenium.support.ui.WebDriverWait.<init>(WebDriverWait.java:72)
        at org.openqa.selenium.support.ui.WebDriverWait.<init>(WebDriverWait.java:46)
        at test.Choose_campaign_from_dashboard.ChooseCampaign(Choose_campaign_from_dashboard.java:14)
        at test.automated_script.main(automated_script.java:14)
Editováno 26.1.2018 9:03
 
Odpovědět
26.1.2018 9:01
Avatar
Robert Michalovič:26.1.2018 13:04

No fůůj, to je katastrofa. Takto se fakt neprogramuje, toto je fakt odporné.

Nicméně pravděpodobně ta chyba co se ti vyskytuje :

public static void ChooseCampaign() throws InterruptedException {
                // Login page
                WebDriverWait wait = new WebDriverWait(driver, 9000);
                ....
        }

odkazuješ se na objekt "driver" a ten v dané třídě není k dispozici a není ani inicializován.

 
Nahoru Odpovědět
26.1.2018 13:04
Avatar
Pavel Stanek
Člen
Avatar
Pavel Stanek:26.1.2018 15:57

Psal jse , ze jsem samouk. Co a jak je potreba upravit ?

Dekuji

 
Nahoru Odpovědět
26.1.2018 15:57
Avatar
Lubor Pešek
Člen
Avatar
Odpovídá na Pavel Stanek
Lubor Pešek:27.1.2018 11:57
  • Jestli jsi samouk, začni na lehčích projektech. Toto je už trošku vyšší level.
  • Nejspíš jsi tedy jel podle nějakého návodu a snažil ses to pospojovat dohromady
  • Největší problém je v struiktuře programu. A vypadá to, že co metoda, to třída - což je trošku na nic.
  • Pojmenováváš proměnné wait, což sice není klíčové slovo, ale základní metoda Javy, kterou má každá třída.
  • "public class automated_script" Java má nějaké konvence ohledně názvů tříd (First uppger case). A je konvence, že podtržítka se v javě při pojmenovávání v kódu nepoužívají. Maximálně u třídních konstant a nebo názvu souborů.
  • Všechny třída dědí import org.openqa.se­lenium.WebDri­ver. To je trošku chyba, když je struktura navržená takto
  • Ve všech třídách všechno patláš do jedné metody. Vůbec se v tom nedá orientovat. Proto existují funkce (v javě metody), u kterých můžeš rozparsovat část kódu.

Pířklad: Když třeba pracuješ s databází, jedna metoda ti bude zajišťovat připojení, druhá upload data, třetí download data. A víš, že když budeš mít problém s připojením, půjdeš do této metody. Neřkuli, že touto metodou bys to připojení mohl nastavovat, když bys sosal z více databází.

Ve tvém projektu je extrémně těžké vůbec zjistit, na co která třída je (pominuli, že vůbec nemáš dokumentační
ani obecné komentáře). Prostě pro začátečníka je toto už trošku těžší projekt. Java není jako lego, u kterého když se naučíš spojovat dvě kostičky, tak si můžeš troufnout na vyšší stavebnici. U lega to nevadí, ale proto existují u Javy programátoři. Oni jsou právě ti, co myslí a co musí dávat pokud možno nejúsporněji, nejbezepečnějí, nejlogičtitěji a nejoptimálnějí kousíčky kódu k sobě.

Nahoru Odpovědět
27.1.2018 11:57
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
Pavel Stanek
Člen
Avatar
Pavel Stanek:28.1.2018 12:43

Dekuji za vysvetleni. Ano delal jsem to podle youtube.

Lze nejak ukazat jak by to melo vypadat ?

Dekuji za ochotu.

 
Nahoru Odpovědět
28.1.2018 12:43
Avatar
Petr
Člen
Avatar
Odpovídá na Pavel Stanek
Petr:28.1.2018 16:08

Ahoj, pokud ovladas anglictinu tak bych spise doporucil zacit treba tady:
http://toolsqa.com/…t-test-case/
V anglictine existuje spousta tutorialu na selenium, youtube nedoporucuji, protoze lide se casto nevyjadruji presne. Navic se ti zrejme podarilo vyhmatnou hodne spatny priklad.
Take bych ti doporucil zacit s nejakym tutorialem zamerenym na javu samotnou, protoze ti schazeji zaklady. Bez zakladu nebudes schopen zadny tutorial pochopit a rozsirit.

 
Nahoru Odpovědět
28.1.2018 16:08
Avatar
Lubor Pešek
Člen
Avatar
Odpovídá na Petr
Lubor Pešek:28.1.2018 16:49

souhlas souhlas a ještě jednou souhlas

Nahoru Odpovědět
28.1.2018 16:49
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
Pavel Stanek
Člen
Avatar
Pavel Stanek:29.1.2018 8:21

Ahoj, koukal jsem na ten navod, ale nenasel jsem nic o multi classes. Muj script ma pres 4000 radku a pokud je vcelku , tak funguje bezvadne. No jelikoz mi to roste o dalsi radky , tak ho proto potrebuji rozdelit a pak volat to co potrebuji.

 
Nahoru Odpovědět
29.1.2018 8:21
Avatar
Pavel Stanek
Člen
Avatar
Pavel Stanek:29.1.2018 9:04

Neni to prace , ale chci se to naucit.

 
Nahoru Odpovědět
29.1.2018 9:04
Avatar
Petr
Člen
Avatar
Odpovídá na Pavel Stanek
Petr:29.1.2018 10:29

Dobre, ale co konkretne se chces naucit? Javu? Selenium?
Pokud ti jde o Selenium v jave tak se potrebujes naucit prvne javu. Pokud ti jde o selenium obecne tak myslim ze na jednodussi veci by bylo lepsi pouzit jiny jazyk, napr. python nebo ruby, kde je jednodussi napsat kratke veci. Selenium ma myslim podporu minimalne v pythonu a videl sem i nejaky projekt v ruby. Pokud se chces ucit javu, tak selenium neni dobry studijni material pro zacatecnika.

Pokud trvas na Selenium v jave tak zacni s tutorialem javy a na selenium chvili zapomen. V jave se vice samostatnych trid nikdy nezapisuje do jednoho souboru.

K tvemu problemu konkretne, driver se ti inicializuje v metode openMain() ale nevidim, ze by jsi tu metodu nekde volal. Pak je driver null a samozrejme ti to spadne.

 
Nahoru Odpovědět
29.1.2018 10:29
Avatar
Pavel Stanek
Člen
Avatar
Pavel Stanek:29.1.2018 13:33
public static WebDriver driver;

Tohle jsem odstranil , ale dostanu stejnu chybu.

Co se tyce selenia , tak umim pouzivat prikazy (vse mi funguje), jelikoz mi stacila jedna classa.No ted to potrebuji rozdelit na vic classy a pak je volat kde potrebuji.

 
Nahoru Odpovědět
29.1.2018 13:33
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.