Используйте тот же сеанс пользователя в другом классе - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь найти способ использовать то же самое открытое окно / сеанс phantomjs в другом классе.

Если окно / сеанс перезагружено / повторно открыто / обновлено, пользователь выйдет из системы.

Когда я захожу на сайт и захожу в свою учетную запись, я нажимаю F5 или обновляю, я выхожу из системы.

У меня есть класс: Логин / CarteEtd / CarteEtd_Info / Accueil

Когда пользователь входит в Jframe в классе Login, он перенаправляет на класс Accueil (домашняя страница), чтобы при нажатии на него он находил изображения / кнопки, он перенаправляет на класс CarteEtd, затем CarteEtd перенаправляет на CarteEtd_Info

Почему класс CarteEtd, а затем CarteEtd_Info?потому что я не могу наследовать класс Login в CarteEtd, потому что CarteEtd имеет расширенный JFrame, поэтому я помещаю JFrame / GUI в CarteEtd, а затем вызываю CarteEtd_Info, класс CarteEtd_Info делает снимок экрана с информацией о конкретном пользователе в открытых фантомахв классе входа в систему

Проблема теперь в том, что CarteEtd_Info использует драйвер класса входа в систему, но он перезагружает или открывает новые Phantomjs, idk, но я знаю, что пользователь вышел из системы

I 'используя скриншот, чтобы получить капчу и идентификационную карту пользователя

Это часть класса входа в систему

    System.setProperty("phantomjs.binary.path", "phantomjs.exe");
    WebDriver driver = new PhantomJSDriver();

    //driver.manage().Window.Size = new Size(1920, 1080);
    driver.get("https://www4.inscription.tn/ORegMx/servlet/AuthentificationEtud?ident=cin");
    String title1=driver.getTitle();
    if (!(title1.equals("Site de l'inscription universitaire en ligne"))) {
        JOptionPane.showMessageDialog(null,"Verifiez votre connexion internet");
        driver.quit();

    }
    WebElement ele = driver.findElement(By.xpath("//td[@rowspan='2']"));

    driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
    // Get entire page screenshot
    File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
    BufferedImage  fullImg = ImageIO.read(screenshot);

    // Get the location of element on the page
    org.openqa.selenium.Point point = ele.getLocation();

    // Get width and height of the element
    int eleWidth = ele.getSize().getWidth();
    int eleHeight = ele.getSize().getHeight();

    // Crop the entire page screenshot to get only element screenshot
    BufferedImage eleScreenshot= fullImg.getSubimage(point.getX(), point.getY(),
        eleWidth, eleHeight);
    ImageIO.write(eleScreenshot, "png", screenshot);

    // Copy the element screenshot to disk
    File screenshotLocation = new File("temp\\captcha.png");
    FileUtils.copyFile(screenshot, screenshotLocation); 


    JLabel captcha = new JLabel("");
    captcha.setIcon(new ImageIcon("temp\\captcha.png"));
    captcha.setBounds(574, 304, 182, 50);
    frame.getContentPane().add(captcha);

Это код в CarteEtd, который вызывает CarteEtd_Info

    CarteEtd_Info id= new CarteEtd_Info();

    id.id();

это весь код класса CarteEtd_info

class CarteEtd_Info extends Login{



/**
 * 
 */
private static final long serialVersionUID = 1L;

public CarteEtd_Info() throws IOException {
    super();
    // TODO Auto-generated constructor stub
}

public void id() throws IOException {
//  driver= Login.driver;
    //WebDriver driver = sameWindow.driver;
    //driver.manage().timeouts().implicitlyWait(4, TimeUnit.SECONDS);
    WebElement ele = driver.findElement(By.xpath("/html[1]/body[1]/table[1]/tbody[1]/tr[1]/td[1]/table[1]/tbody[1]/tr[1]/td[1]/table[1]/tbody[1]/tr[1]/td[1]/form[1]/div[1]/table[1]/tbody[1]/tr[1]/td[3]/div[1]/span[1]/a[1]/i[1]"));
    driver.manage().timeouts().implicitlyWait(4, TimeUnit.SECONDS);
    //Actions builder = new Actions(driver);
   // builder.moveToElement(ele2).click(ele2);
   // builder.perform();
    //driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);

    // Get entire page screenshot
    //WebElement ele = driver.findElement(By.xpath("/html[1]/body[1]/table[1]/tbody[1]/tr[1]/td[1]/table[1]/tbody[1]/tr[1]/td[1]/table[2]/tbody[1]/tr[4]/td[1]"));
    File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
    BufferedImage fullImg = null;
    try {
        fullImg = ImageIO.read(screenshot);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    // Get the location of element on the page
    org.openqa.selenium.Point point = ele.getLocation();

    // Get width and height of the element
    int eleWidth = ele.getSize().getWidth();
    int eleHeight = ele.getSize().getHeight();

    // Crop the entire page screenshot to get only element screenshot
    BufferedImage eleScreenshot= fullImg.getSubimage(point.getX(), point.getY(),
        eleWidth, eleHeight);
    try {
        ImageIO.write(eleScreenshot, "png", screenshot);
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    // Copy the element screenshot to disk
    File screenshotLocation = new File("temp\\carte.png");
    try {
        FileUtils.copyFile(screenshot, screenshotLocation);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }   
}
}

Я думаю, есть ли способ сохранить куки пользователя и использовать его в новом окне phantomjs

или

код в классе Login - поймать pid открытого процесса phantomjs, затем он использует этот pid для вызова процесса и использует его в CarteEtd_Info

Allпотому что я хочу сделать свой код чистым, чтобы загрузить его в github после этого в качестве школьного проекта, проще использовать все в одном классе, но я считаю, что использование нескольких классов - это профессиональный способ

...