0

I have created simple GUI using PYQT5 which asking user to provide server name . and want to use the user input in another python unittest script . I am very new in python world and trying to learn . I have imported the test_launch.py file in psft.py and tried below code:

self.obj= test_launch.Ui_MainWindow() 
self.host1=self.obj.host() 
print(self.host1) 

but unable to print when click launch button on GUI lauch button in test_launch calling execute function and calling the script psft.py but in psft.py not able to print the user inputs.

test_launch.py

from PyQt5 import QtCore, QtWidgets
import subprocess

class Ui_MainWindow(object):
    def execute(self):
        subprocess.call('python .\psft.py')

    def host(self, server):
        self.server=self.target_details.text()
        #print (self.server)
        return self.server

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(520, 215)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.target_details = QtWidgets.QLineEdit(self.centralwidget)
        self.target_details.setGeometry(QtCore.QRect(190, 40, 113, 20))
        self.target_details.setObjectName("target_details")
        self.sitename = QtWidgets.QLineEdit(self.centralwidget)
        self.sitename.setGeometry(QtCore.QRect(190, 70, 113, 20))
        self.sitename.setObjectName("sitename")
        self.nodes = QtWidgets.QLineEdit(self.centralwidget)
        self.nodes.setGeometry(QtCore.QRect(190, 100, 113, 20))
        self.nodes.setObjectName("nodes")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(120, 40, 91, 20))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(120, 70, 47, 13))
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(120, 100, 47, 13))
        self.label_3.setObjectName("label_3")
        self.launch_btn = QtWidgets.QPushButton(self.centralwidget)
        self.launch_btn.setGeometry(QtCore.QRect(190, 150, 75, 23))
        self.launch_btn.setObjectName("launch_btn")
        self.launch_btn.clicked.connect(self.execute)
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(320, 40, 171, 16))
        self.label_4.setObjectName("label_4")
        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setGeometry(QtCore.QRect(320, 70, 171, 16))
        self.label_5.setObjectName("label_5")
        self.label_6 = QtWidgets.QLabel(self.centralwidget)
        self.label_6.setGeometry(QtCore.QRect(320, 100, 171, 16))
        self.label_6.setObjectName("label_6")
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Test Launcher"))
        self.label.setText(_translate("MainWindow", "Target server"))
        self.label_2.setText(_translate("MainWindow", "Site Name"))
        self.label_3.setText(_translate("MainWindow", "Nodes"))
        self.launch_btn.setText(_translate("MainWindow", "Launch Test"))
        self.label_4.setText(_translate("MainWindow", "ex(http://server:port)"))
        self.label_5.setText(_translate("MainWindow", "ex(PSFINDMO)"))
        self.label_6.setText(_translate("MainWindow", "ex(PSFT_HR,HRMS)"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

psft.py

from selenium import webdriver
import unittest
from selenium.webdriver.common.keys import Keys
from time import sleep
import HtmlTestRunner
from selenium.common.exceptions import NoSuchElementException
import test_launch

class PeoplesoftTest(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Chrome(executable_path='../Drivers/chromedriver.exe')
        cls.driver.implicitly_wait(10)
        cls.driver.maximize_window()

    def test_1_search_login_test(self):

        self.obj= test_launch.Ui_MainWindow()
        self.host1=self.obj.host()

        print(self.host1)
       ---code continue---
    @classmethod
    def tearDownClass(cls):
        cls.driver.close()
        cls.driver.quit()
        print("Test Completed")

if __name__ == '__main__':
    unittest.main(testRunner=HtmlTestRunner.HTMLTestRunner(output='C:/py/projects/test_automation/HTML'))
2
  • I have created simple GUI using PYQT5 which asking user to provide server name . and want to use the user input in another python unittest script . I am very new in python world and trying to learn . I have imported the test_launch.py file in psft.py and tried below code self.obj= test_launch.Ui_MainWindow() self.host1=self.obj.host() print(self.host1) but unable to print when click launch button on GUI lauch button in test_launch calling execute function and calling the script psft.py but in psft.py not able to print the user inputs. Commented Apr 17, 2019 at 17:19
  • This information should be in the question, in this case I already put it but take it into account for a next occasion. I recommend you read How to Ask and pass the tour Commented Apr 17, 2019 at 18:27

1 Answer 1

0

You are launching a process so using the script will not make you get the value you want.

Using this answer you can pass the data through the environment variables

test_launch.py

import os
from PyQt5 import QtCore, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(520, 215)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.target_details = QtWidgets.QLineEdit(self.centralwidget)
        self.target_details.setGeometry(QtCore.QRect(190, 40, 113, 20))
        self.target_details.setObjectName("target_details")
        self.sitename = QtWidgets.QLineEdit(self.centralwidget)
        self.sitename.setGeometry(QtCore.QRect(190, 70, 113, 20))
        self.sitename.setObjectName("sitename")
        self.nodes = QtWidgets.QLineEdit(self.centralwidget)
        self.nodes.setGeometry(QtCore.QRect(190, 100, 113, 20))
        self.nodes.setObjectName("nodes")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(120, 40, 91, 20))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(120, 70, 47, 13))
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(120, 100, 47, 13))
        self.label_3.setObjectName("label_3")
        self.launch_btn = QtWidgets.QPushButton(self.centralwidget)
        self.launch_btn.setGeometry(QtCore.QRect(190, 150, 75, 23))
        self.launch_btn.setObjectName("launch_btn")
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(320, 40, 171, 16))
        self.label_4.setObjectName("label_4")
        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setGeometry(QtCore.QRect(320, 70, 171, 16))
        self.label_5.setObjectName("label_5")
        self.label_6 = QtWidgets.QLabel(self.centralwidget)
        self.label_6.setGeometry(QtCore.QRect(320, 100, 171, 16))
        self.label_6.setObjectName("label_6")
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Test Launcher"))
        self.label.setText(_translate("MainWindow", "Target server"))
        self.label_2.setText(_translate("MainWindow", "Site Name"))
        self.label_3.setText(_translate("MainWindow", "Nodes"))
        self.launch_btn.setText(_translate("MainWindow", "Launch Test"))
        self.label_4.setText(_translate("MainWindow", "ex(http://server:port)"))
        self.label_5.setText(_translate("MainWindow", "ex(PSFINDMO)"))
        self.label_6.setText(_translate("MainWindow", "ex(PSFT_HR,HRMS)"))


class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)
        self.launch_btn.clicked.connect(self.execute)
        self._process = QtCore.QProcess(self)

    @QtCore.pyqtSlot()
    def execute(self):
        host = self.target_details.text()
        os.environ["TEST_HOST"] = host
        self._process.start("python", ["psft.py"])

    @QtCore.pyqtSlot()
    def on_finished(self):
        del os.environ["TEST_HOST"]


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

psft.py

import os

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException

import unittest
import HtmlTestRunner


class PeoplesoftTest(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        path = "../Drivers/chromedriver.exe"
        cls.driver = webdriver.Chrome(executable_path=path)
        cls.driver.implicitly_wait(10)
        cls.driver.maximize_window()

    def test_1_search_login_test(self):
        host = os.environ.get("TEST_HOST")
        if host is not None:
            print(host)
        else:
            print("not found")

    @classmethod
    def tearDownClass(cls):
        cls.driver.close()
        cls.driver.quit()
        print("Test Completed")


if __name__ == "__main__":
    html_output = "C:/py/projects/test_automation/HTML"
    unittest.main(testRunner=HtmlTestRunner.HTMLTestRunner(output=html_output))
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.