def test_click_menu_link_main(self): """ try to click main link from menu """ LoginService(self.driver).login() test_page = BasePage(self.driver) test_page.click_menu_link_main()
def test_guest_cant_see_product_in_basket_opened_from_product_page(self, browser): link = "http://selenium1py.pythonanywhere.com/ru/" page = BasePage(browser, link) page.open() page1 = BasketPage(browser, link) page1.AllProducts() page.go_to_look_basket() pages = AddInBasket(browser, link) pages.AssertIsNotElementPresent() page1.AssertTextBasketEmpty()
def setup(self): """ This fixture holds the common setup steps required to Login to the application returns: Home page of the application for authenticated users """ self.webdriver = webdriver.Chrome() self.base_page = BasePage(self.webdriver) self.home_page = HomePage(self.webdriver) self.login_page = Login(self.webdriver) self.search_result_page = SearchResultPage(self.webdriver) self.valid_credentials = conf_reader.get_user_credentials() self.landing_page_hotel = LandingPageHotel(self.webdriver) self.home_page.open_login_page() yield self.webdriver.quit()
def driver_init(request, pytestconfig): browser = pytestconfig.getoption("browser") url = pytestconfig.getoption("url") option = pytestconfig.getoption("option") if browser == "chrome": if option == "headless": options = Options() options.headless = True driver = BasePage( webdriver.Chrome(ChromeDriverManager().install(), options=options)) else: driver = BasePage(webdriver.Chrome( ChromeDriverManager().install())) request.cls.driver = driver driver.load_url(url) yield driver.quit()
def test_guest_cant_see_product_in_cart_opened_from_main_page(browser): link = "http://selenium1py.pythonanywhere.com" page = BasePage(browser, link) page.open() page.go_to_cart() cart_page = CartPage(browser, browser.current_url) cart_page.check_there_are_no_products_in_cart() cart_page.should_be_text_cart_is_empty() #print('__file__={0:<35} | __name__={1:<20} | __package__={2:<20}'.format(__file__,__name__,str(__package__)))
def setup(self, browser): link = "http://selenium1py.pythonanywhere.com/catalogue/coders-at-work_207/" email = str(time.time()) + "@fakemail.org" password = "******" product_page = BasePage(browser, link) product_page.open() product_page.go_to_login_page() page = LoginPage(browser, browser.current_url) page.open() page.register_new_user(email, password) page.should_be_authorized_user()
def __init__(self, browser_name, base_url): if browser_name == "chrome": self.browser = webdriver.Chrome() self.browser.maximize_window() self.browser.implicitly_wait(5) elif browser_name == "firefox": self.browser = webdriver.Firefox() self.browser.maximize_window() self.browser.implicitly_wait(5) else: raise pytest.UsageError( "--browser_name should be chrome or firefox") self.base_url = base_url self.base_page = BasePage(self) self.feedback_page = FeedbackPage(self)
def test_recruitment_menu(self): main_menu = MainMenu(self.driver) base_page = BasePage(self.driver) main_menu.selectRecruitment() header = base_page.get_header() self.assertEqual('Candidates', header) self.driver.set_window_size(100, 100) # If the window is small there is no way to click by standard way # self.driver.find_element_by_link_text("Vacancies").click() # The only way is to use JS query # self.driver.execute_script("document.querySelector('#menu_recruitment_viewJobVacancy').click()") # OR the easier way self.driver.execute_script( 'arguments[0].click()', self.driver.find_element_by_link_text("Vacancies")) header = base_page.get_header() self.assertEqual('Vacancies', header)
def test_guest_cant_see_product_in_basket_opened_from_product_page(browser): link = "http://selenium1py.pythonanywhere.com/en-gb/catalogue/hacking-exposed-wireless_208/" page = BasePage( browser, link) # Инициализируем класс BasePage чтобы использовать его методы page.open( ) # Открываем страницу (link передаём, поэтому откроется та страница, ссылку на которую мы передали) page.go_to_cart( ) # Используем метод (выполняем функцию) go_to_cart (переход в корзину) класса BasePage basket = BasketPage( browser, link) # Инициализируем класс BasketPage чтобы использовать его методы basket.basket_is_empty( ) # Проверяем, что корзина пуста, используя метод basket_is_empty класса BasketPage basket.basket_is_empty_message( ) # Проверяем, что есть сообщение о том, что корзина пуста, используя метод basket_is_empty класса BasketPage
class backyard_login(BasePage): def __init__(self, appiumdriver): self.base_page = BasePage(appiumdriver) def login_to_index_page(self, zhanghao=None): #self.base_page.find_bytext('同意并继续') time.sleep(1) usename = self.base_page.find_byID_( 'com.flashexpress.backyard:id/userName') usename.send_keys(zhanghao) time.sleep(1) pwd = self.base_page.find_byID_( 'com.flashexpress.backyard:id/userPass') pwd.send_keys(123456) time.sleep(1) self.base_page.find_byID_('com.flashexpress.backyard:id/login').click() time.sleep(3) return self def login_success_tishi(self): try: element = self.base_page.find_bytext('同意并继续') if len(element) == 1: self.base_page.find_bytext('同意并继续').click() except NoSuchElementException: print('没有出现 同意并继续按钮 不需要任何操作') time.sleep(3) #查找输入工号是否这个elements存在,如果存在,证明没有登入成功,返回elements=1 tishi = self.base_page.return_elements_num('输入工号') #如果返回胡elements=1 ,证明找到了,输入工号输入框,此时需要进行登入操作了,否则证明登入成功,只会打印 ‘已登入成功’ if len(tishi) == 1: return True else: return False
def setUpClass(cls): if cls.browser == BrowserSupported.CHROME: options = webdriver.ChromeOptions() options.add_argument("--kiosk") options.add_argument("allow-running-insecure-content") cls.driver = webdriver.Chrome(ChromeDriverManager().install(), chrome_options=options) cls.driver.implicitly_wait(20) elif cls.browser == BrowserSupported.FIREFOX: options = webdriver.FirefoxOptions() options.add_argument("--kiosk") options.add_argument("allow-running-insecure-content") cls.driver = webdriver.Firefox( executable_path=GeckoDriverManager().install(), firefox_options=options) cls.driver.implicitly_wait(20) else: assert False, "Unknown Browser {}".format(cls.browser) # Setting implicit wait cls.driver.implicitly_wait(20) # Navigating to sign in page cls.get_page_and_load_time(cls) # Creating objects for different pages cls.bp = BasePage(cls.logger, cls.driver) cls.da = DelayedAssert(cls.logger, cls.driver) cls.hp = HomePage(cls.logger, cls.driver, cls.bp) cls.yop = YourOrdersPage(cls.logger, cls.driver, cls.bp) cls.sip = SignInPage(cls.logger, cls.driver, cls.bp) cls.yap = YourAccountPage(cls.logger, cls.driver, cls.bp) cls.lasp = LoginAndSecurityPage(cls.logger, cls.driver, cls.bp) cls.ch = CredentialHelper()
def wait_for_listings(self): """ Wait for listings to appear in the main page """ BasePage.wait_until_condition( lambda: len(self.listing_titles_sorted()) > 0, 'No listings are shown')
def wait_for_state_filters(self): BasePage.wait_until_condition(lambda: len(self.filter_tabs()) > 0, 'State filters are not visible')
def setup(self): basepage = BasePage()
class case_fail(BasePage): def __init__(self, appium_driver): self.base_page = BasePage(appium_driver) def to_wodeshenqing_page(self): time.sleep(3) self.base_page.to_now_context('NATIVE_APP') time.sleep(5) # result = [] # con = self.base_page.get_context() # # print('审批页面的context:开始输出') # print(con) # print('审批页面的context:输出结束') ''' 底部导航栏是原生按钮 如果当前页面在可见审批导航栏页面,需要点击审批按钮,进入审批页面 点击我的申请按钮 点击待审批按钮,进入请假申请页面 页面向上滑动一次 点击撤销按钮 点击确认撤销提示的 确定按钮 点击页面的返回按钮,页面返回至审批页面 ''' # 点击审批按钮 self.base_page.find_bytext('审批').click() time.sleep(2) # context_now = 'WEBVIEW_com.flashexpress.backyard' # self.base_page.to_now_context(context_now) # time.sleep(5) # print("点击我的申请前:当前的context") # #print(self.base_page.get_current_context()) # print("点击我的申请前:当前的context") # 点击我的申请 self.base_page.by_touchAction_uiautomator2(700, 400) # wodeshenqing = self.base_page.find_byxpath('//*[@id="app"]/div/a[2]') # wodeshenqing.click() time.sleep(1) def return_len_jiabanleixing(self): time.sleep(1) #print(self.base_page.return_current_window_handle()) #print(self.base_page.return_all_handles()) # #获取我的申请页面的加班类型文字 # self.base_page.to_now_context('NATIVE_APP') # time.sleep(5) self.base_page.to_now_context('WEBVIEW_com.flashexpress.backyard') time.sleep(5) try: jiabanleixing = self.base_page.find_byxpath( '//*[@id="pageOne"]/div/div[2]/div/div[1]/div/div/div/div[2]/div[2]/div[1]' ).text print('加班类型:' * 8) print(jiabanleixing) print('加班类型:' * 8) except NoSuchElementException: print('没有找到加班类型文字,证明不需要撤销') print(NoSuchElementException) else: time.sleep(2) return jiabanleixing def return_len_qingjialeixing(self): time.sleep(1) #print(self.base_page.return_current_window_handle()) #print(self.base_page.return_all_handles()) # #获取我的申请页面的请假类型文字 # self.base_page.to_now_context('NATIVE_APP') # time.sleep(5) self.base_page.to_now_context('WEBVIEW_com.flashexpress.backyard') time.sleep(5) print('当前context' * 8) print(self.base_page.get_current_context()) print('当前context' * 8) self.base_page.to_now_context('NATIVE_APP') # self.base_page.to_now_context('WEBVIEW_com.flashexpress.backyard') time.sleep(5) print('当前contexct' * 9) print(self.base_page.get_current_context()) print('当前contexct' * 9) page = self.base_page.return_page() print(page) try: qingjia = self.base_page.find_byH5_className( 'android.view.View', 12) except IndexError: print(IndexError) else: # qingjia = self.base_page.find_byxpath('//*[@id="pageOne"]/div/div[2]/div/div[1]/div/div/div/div[2]/div[1]/div[2]') print('请假' * 9) print(qingjia) print('请假' * 9) qingjialeixing = qingjia.text return qingjialeixing def chexiaoshenqing_success(self): # print('点击前待审批页面的context') # # print(self.base_page.get_context()) # print('点击前待审批页面的context') # 各种方法定位不到,只能通过模拟点击事件 [837,378][963,429] 考虑兼容性。进来靠右边一些 # 点击待审批按钮 self.base_page.by_touchAction_uiautomator2(x=900, y=400) # print('点击后待审批页面的context') # # print(self.base_page.get_context()) # print('点击后待审批页面的context') time.sleep(3) self.base_page.swipeUp() time.sleep(2) # 无法获取撤销按钮,改用模拟点击事件 [315,1602][765,1740] # self.base_page.find_by_H5_name('撤销').click() #点击撤销按钮 self.base_page.by_touchAction_uiautomator2(x=500, y=1700) time.sleep(2) # 无法获取确定按钮,改用模拟点击事件[546, 1353][1005, 1473] # self.base_page.find_by_H5_name('确定').click() self.base_page.by_touchAction_uiautomator2(x=900, y=1400) time.sleep(2) # 点击返回按钮,页面返回到审批页面,但是back方法不可使用, # self.base_page.back_() # 返回按钮 =[30,54][174,198] self.base_page.by_TouchAction_dingwei(100, 150) time.sleep(2) #self.base_page.to_now_context('NATIVE_APP') time.sleep(5) # self.base_page.to_now_context('WEBVIEW_com.flashexpress.backyard') # time.sleep(2) # self.base_page.find_byxpath('//*[@id="app"]/div/a[2]').text # 点击打卡按钮 [109,1791][160,1857] self.base_page.by_touchAction_uiautomator2(130, 1830) time.sleep(2) def fanhuidao_daka_page(self): #点击我的申请页面返回按钮 self.base_page.to_now_context('NATIVE_APP') time.sleep(5) #[30,54][174,198] self.base_page.by_touchAction_uiautomator2(100, 100) time.sleep(2) #点击打卡按钮 [109,1791][160,1857] self.base_page.by_touchAction_uiautomator2(130, 1830) time.sleep(2)
def login(self, sign_in_link , login_form, user_data): BasePage.login(self, sign_in_link , login_form, user_data, self.acc_settings) return self
def continue_button(self): self.click_continue_button() return BasePage()
def test_click_logo_link(self): """ try to click logo link """ test_page = BasePage(self.driver) test_page.click_header_logo()
def __init__(self, appium_driver): self.base_page = BasePage(appium_driver)
def __init__(self, driver): self.driver = driver BasePage.__init__( self, driver, "http://www.automationpractice.com/?controller=search*")
def do_logout(self): test_page = BasePage(self.driver) test_page.click_logout_link()
def __init__(self, driver): BasePage.__init__(self, driver) MixinCheckout.__init__(self)
def classSetup(self, oneTimeSetUp): self.login_page = LoginPage(self.driver, self.log_level) self.base_page = BasePage(self.driver, self.log_level)
class qingjia_chanjianjia_page(BasePage): def __init__(self, appiumdriver): self.base_page = BasePage(appiumdriver) '''产检(带薪)成功申请''' def chanjianjia2day_zhengchang_success(self): # 点击请假 try: qingjia_button = self.base_page.find_byID_( 'com.flashexpress.backyard:id/_leave') except: for i in range(3): qingjia_button.click() time.sleep(1) else: qingjia_button.click() # 切换到webview下 view_now = 'WEBVIEW_com.flashexpress.backyard' self.base_page.to_now_context(view_now) cot = self.base_page.get_context() print(cot) print('点击请假类型前:') # 点击请假类型 try: ele = self.base_page.find_byxpath( '//*[@id="app"]/div/div[1]/div[1]/div/input') except NoSuchElementException: for i in range(3): ele.click() time.sleep(1) else: ele.click() cots = self.base_page.get_context() print(cots) print('点击请假类型后:') # 点击产检假(带薪)按钮,修改请假类型,只需要更改后边的li的下标 self.base_page.find_byClassAndTag('date-list', 'li', 0, 12).click() time.sleep(3) self.base_page.to_now_context(view_now) # 点击开始时间按钮 # self.base_page.find_byxpath('//*[@id="app"]/div/div[1]/div[2]/div/input').click() self.base_page.find_byClassAndTag('mt-item-field-inner', 'input', 1, 0).click() print('还没有点击时间21') # 点击21号,如果后续日期更换,只更换对于的坐标就可以了 ''' 位置信息 ''' x = read_yaml_file('chanjianjia2day_zhengchang_success', 'startTime') self.base_page.by_TouchAction_dingwei(x[0], x[1]) time.sleep(3) # 点击确按钮 # 确定按钮位置 = [540,1260][1080,1380] self.base_page.by_TouchAction_dingwei(800, 1300) print('点击了确定按钮') time.sleep(3) # 点击结束时间按钮 self.base_page.find_byClassAndTag('mt-item-field-inner', 'input', 2, 0).click() time.sleep(2) # 点击22号,如果后续日期更换,只更换对于的坐标就可以了 # 坐标位置 = [18,1473][165,1608] ''' 位置信息 ''' y = read_yaml_file('chanjianjia2day_zhengchang_success', 'endTime') self.base_page.by_TouchAction_dingwei(y[0], y[1]) time.sleep(3) # 点击确按钮 # 确定按钮位置 = [540,1260][1080,1380] self.base_page.by_TouchAction_dingwei(800, 1300) time.sleep(1) # 输入请假原因 self.base_page.find_byxpath('//*[@id="app"]/div/div[1]/div[6]/textarea' ).send_keys('产检假两天-请假的原因') time.sleep(2) # 浏览器页面需要向上滑动一下 self.base_page.swipeUp() time.sleep(2) # 点击提交按钮 # 提交按钮 = [90, 1695][990, 1830] self.base_page.by_TouchAction_dingwei(500, 1750) time.sleep(2) # 提交的确认弹框 # 确定按钮 = [540,1245][1017,1365] self.base_page.by_TouchAction_dingwei(800, 1300) self.base_page.to_now_context('NATIVE_APP') time.sleep(3) qingjia_button_text = self.base_page.find_byandroid_text('请假').text print('打卡页面的 请假按钮文字') print(qingjia_button_text) print('打卡页面的 请假按钮文字') return qingjia_button_text '''产检假,超出8天后,会提示:请假余额已用完 只能申请时间今天及今天以后,不限制次数,按天数算''' def chanjianjia9day_fail(self): time.sleep(2) # 点击请假 qingjia_button = self.base_page.find_byID_( 'com.flashexpress.backyard:id/_leave') qingjia_button.click() time.sleep(1) # 切换到webview下 view_now = 'WEBVIEW_com.flashexpress.backyard' self.base_page.to_now_context(view_now) cot = self.base_page.get_context() print(cot) print('点击请假类型前:') # 点击请假类型 self.base_page.find_byxpath( '//*[@id="app"]/div/div[1]/div[1]/div/input').click() time.sleep(1) cots = self.base_page.get_context() print(cots) print('点击请假类型后:') # 点击带薪事假(带薪)按钮,修改请假类型,只需要更改后边的li的下标 self.base_page.find_byClassAndTag('date-list', 'li', 0, 12).click() time.sleep(3) self.base_page.to_now_context(view_now) # 点击开始时间按钮 # self.base_page.find_byxpath('//*[@id="app"]/div/div[1]/div[2]/div/input').click() self.base_page.find_byClassAndTag('mt-item-field-inner', 'input', 1, 0).click() time.sleep(1) print('还没有点击时间27') # 点击19号,如果后续日期更换,只更换对于的坐标就可以了 [771,1473][918,1608] ''' 位置信息 ''' a = read_yaml_file('chanjianjia9day_fail', 'startTime') self.base_page.by_TouchAction_dingwei(a[0], a[1]) time.sleep(3) # 点击确按钮 # 确定按钮位置 = [540,1260][1080,1380] self.base_page.by_TouchAction_dingwei(800, 1300) print('点击了确定按钮') time.sleep(3) # 点击结束时间按钮 self.base_page.find_byClassAndTag('mt-item-field-inner', 'input', 2, 0).click() time.sleep(2) # 点击10.3 号,如果后续日期更换,只更换对于的坐标就可以了 # 坐标位置 = [618,1614][768,1749] ''' 位置信息 ''' b = read_yaml_file('chanjianjia9day_fail', 'endTime') self.base_page.by_TouchAction_dingwei(b[0], b[1]) time.sleep(3) # 点击确按钮 # 确定按钮位置 = [540,1260][1080,1380] self.base_page.by_TouchAction_dingwei(800, 1300) time.sleep(1) # 输入请假原因 self.base_page.find_byxpath('//*[@id="app"]/div/div[1]/div[6]/textarea' ).send_keys('产检假8.5天-请假的原因') time.sleep(2) # 浏览器页面需要向上滑动一下 self.base_page.swipeUp() time.sleep(2) # 点击提交按钮 # 提交按钮 = [90, 1695][990, 1830] self.base_page.by_TouchAction_dingwei(500, 1750) time.sleep(2) # 提交的确认弹框 # 确定按钮 = [540,1245][1017,1365] self.base_page.by_TouchAction_dingwei(800, 1300) # self.base_page.to_now_context('NATIVE_APP') time.sleep(3) # 获取点击提交按钮后的提示 请假余额已用完 a_text = self.base_page.find_byxpath( '/html/body/div[2]/div/div[2]/div[1]').text print('texttexttexttexttexttexttexttext') print(a_text) print('texttexttexttexttexttexttexttext') # 点击请假余额已用完确认提示 self.base_page.find_byxpath( '/html/body/div[2]/div/div[3]/button[2]').click() time.sleep(2) # 将context设置成原生app # self.base_page.to_now_context('NATIVE_APP') # time.sleep(5) # 点击返回按钮 # self.base_page.find_byID_('com.flashexpress.backyard:id/iv_back').click() self.base_page.by_touchAction_uiautomator2(100, 100) time.sleep(2) return a_text
class qingjia_daixinshijia_page(BasePage): def __init__(self, appiumdriver): self.base_page = BasePage(appiumdriver) '''带薪事假成功申请''' def daixinshijia_zhengchang_success(self): # 点击请假 qingjia_button = self.base_page.find_byID_( 'com.flashexpress.backyard:id/_leave') qingjia_button.click() # 切换到webview下 view_now = 'WEBVIEW_com.flashexpress.backyard' self.base_page.to_now_context(view_now) cot = self.base_page.get_context() print(cot) print('点击请假类型前:') # 点击请假类型 self.base_page.find_byxpath( '//*[@id="app"]/div/div[1]/div[1]/div/input').click() cots = self.base_page.get_context() print(cots) print('点击请假类型后:') # 点击带薪事假(带薪)按钮 self.base_page.find_byClassAndTag('date-list', 'li', 0, 1).click() time.sleep(3) self.base_page.to_now_context(view_now) # 点击开始时间按钮 # self.base_page.find_byxpath('//*[@id="app"]/div/div[1]/div[2]/div/input').click() self.base_page.find_byClassAndTag('mt-item-field-inner', 'input', 1, 0).click() print('还没有点击时间21') # 点击21号,如果后续日期更换,只更换对于的坐标就可以了 ''' 位置信息 ''' self.base_page.by_TouchAction_dingwei(100, 1700) time.sleep(3) # 点击确按钮 # 确定按钮位置 = [540,1260][1080,1380] self.base_page.by_TouchAction_dingwei(800, 1300) print('点击了确定按钮') time.sleep(3) # 点击结束时间按钮 self.base_page.find_byClassAndTag('mt-item-field-inner', 'input', 2, 0).click() time.sleep(2) # 点击22号,如果后续日期更换,只更换对于的坐标就可以了 # 坐标位置 = [18,1473][165,1608] ''' 位置信息 ''' self.base_page.by_TouchAction_dingwei(200, 1700) time.sleep(3) # 点击确按钮 # 确定按钮位置 = [540,1260][1080,1380] self.base_page.by_TouchAction_dingwei(800, 1300) time.sleep(1) # 输入请假原因 self.base_page.find_byxpath('//*[@id="app"]/div/div[1]/div[6]/textarea' ).send_keys('带薪事假-请假的原因') time.sleep(2) # 浏览器页面需要向上滑动一下 self.base_page.swipeUp() time.sleep(2) # 点击提交按钮 # 提交按钮 = [90, 1695][990, 1830] self.base_page.by_TouchAction_dingwei(500, 1750) time.sleep(1) # 提交的确认弹框 # 确定按钮 = [540,1245][1017,1365] self.base_page.by_TouchAction_dingwei(800, 1300) time.sleep(3)
def __init__(self, driver): BasePage.__init__(self, driver) MixinLax.__init__(self)
def login(self, sign_in_link, login_form, user_data): self.attach_screen_to_report(self.driver.current_url) BasePage.login(self, sign_in_link, login_form, user_data, self.scrollbar) self.attach_screen_to_report(self.driver.current_url) return self
"""Test base page logic.""" from common.webdriver_factory import create_driver_instance from pages.base_page import BasePage try: driver = create_driver_instance('chrome') page = BasePage(driver, 5, 'https://demoqa.com/books') page.open() page.wait_until_loaded() page.refresh() finally: driver.close()
def test_x3(browser): link = "https://yandex.by/" page = BasePage(browser, link) page.open() login_page = LoginPage(browser, browser.current_url) login_page.check_buttons_over_search()
def __init__(self, driver): BasePage.__init__( self, driver, "http://automationpractice.com/index.php?controller=order")
class qingjia_nianjia_page(BasePage): def __init__(self,appiumdriver): self.base_page = BasePage(appiumdriver) ''' 年假正常时间范围,可以申请:选择2019/9/20-2019/9/21,如果修改脚本,只修改日期的 位置信息 就行 ''' def nianjia_zhengchang_success(self): #点击请假 qingjia_button = self.base_page.find_byID_('com.flashexpress.backyard:id/_leave') qingjia_button.click() #切换到webview下 view_now = 'WEBVIEW_com.flashexpress.backyard' self.base_page.to_now_context(view_now) cot = self.base_page.get_context() print(cot) print('点击请假类型前:') #点击请假类型 self.base_page.find_byxpath('//*[@id="app"]/div/div[1]/div[1]/div/input').click() cots = self.base_page.get_context() print(cots) print('点击请假类型后:') #点击年假(带薪)按钮 self.base_page.find_byClassAndTag('date-list', 'li', 0, 0).click() time.sleep(3) self.base_page.to_now_context(view_now) #点击开始时间按钮 #self.base_page.find_byxpath('//*[@id="app"]/div/div[1]/div[2]/div/input').click() self.base_page.find_byClassAndTag('mt-item-field-inner', 'input', 1, 0).click() print('还没有点击时间26') #点击26号,如果后续日期更换,只更换对于的坐标就可以了 [618,1473][768,1608] ''' 位置信息 ''' a = read_yaml_file('nianjia_zhengchang_success','startTime') self.base_page.by_TouchAction_dingwei(a[0],a[1]) time.sleep(3) #点击确按钮 # 确定按钮位置 = [540,1260][1080,1380] self.base_page.by_TouchAction_dingwei(800,1300) print('点击了确定按钮') time.sleep(3) #点击结束时间按钮 self.base_page.find_byClassAndTag('mt-item-field-inner', 'input', 2, 0).click() time.sleep(2) # 点击28号,如果后续日期更换,只更换对于的坐标就可以了 # 坐标位置 = [921,1473][1068,1608] ''' 位置信息 ''' b = read_yaml_file('nianjia_zhengchang_success','endTime') self.base_page.by_TouchAction_dingwei(b[0], b[1]) time.sleep(3) # 点击确按钮 # 确定按钮位置 = [540,1260][1080,1380] self.base_page.by_TouchAction_dingwei(800, 1300) time.sleep(1) #输入请假原因 self.base_page.find_byxpath('//*[@id="app"]/div/div[1]/div[6]/textarea').send_keys('请假的原因') time.sleep(2) #浏览器页面需要向上滑动一下 self.base_page.swipeUp() time.sleep(2) #点击提交按钮 # 提交按钮 = [90, 1695][990, 1830] self.base_page.by_TouchAction_dingwei(500,1750) # 提交的确认弹框 # 确定按钮 = [540,1245][1017,1365] self.base_page.by_TouchAction_dingwei(800, 1300) time.sleep(3) ''' 年假超出时间范围:选择2019/9/18-2019/9/30,如果修改脚本,只修改日期的 位置信息 就行 10.12 = [921,1755][1068,1890] (1000,1800) 9.30 = [168,1614][315,1749] (250,1700) ''' def nianjia_chaochu_time_tishi(self): # 点击请假 qingjia_button = self.base_page.find_byID_('com.flashexpress.backyard:id/_leave') qingjia_button.click() time.sleep(1) # 切换到webview下 view_now = 'WEBVIEW_com.flashexpress.backyard' self.base_page.to_now_context(view_now) cot = self.base_page.get_context() print(cot) print('点击请假类型前:') # 点击请假类型 self.base_page.find_byxpath('//*[@id="app"]/div/div[1]/div[1]/div/input').click() cots = self.base_page.get_context() print(cots) print('点击请假类型后:') # 点击年假(带薪)按钮 try: ele = self.base_page.find_byClassAndTag('date-list', 'li', 0, 0) except: for i in range(3): ele.click() time.sleep(1) else: ele.click() time.sleep(3) self.base_page.to_now_context(view_now) # 点击开始时间按钮 self.base_page.find_byClassAndTag('mt-item-field-inner', 'input', 1, 0).click() time.sleep(2) print('还没有点击时间18') ''' 位置信息 ''' # 点击9.30号,如果后续日期更换,只更换对于的坐标就可以了 [18,1614][165,1749] c = read_yaml_file('nianjia_chaochu_time_tishi','startTime') self.base_page.by_TouchAction_dingwei(c[0],c[1]) time.sleep(3) # 点击确按钮 # 确定按钮位置 = [540,1260][1080,1380] self.base_page.by_TouchAction_dingwei(800, 1300) print('点击了确定按钮') time.sleep(3) # 点击结束时间按钮 self.base_page.find_byClassAndTag('mt-item-field-inner', 'input', 2, 0).click() time.sleep(2) # 点击10.12号,如果后续日期更换,只更换对于的坐标就可以了 # 坐标位置 = [168,1614][315,1749] ''' 位置信息 ''' d = read_yaml_file('nianjia_chaochu_time_tishi', 'endTime') self.base_page.by_TouchAction_dingwei(d[0], d[1]) time.sleep(3) # 点击确按钮 # 确定按钮位置 = [540,1260][1080,1380] self.base_page.by_TouchAction_dingwei(800, 1300) time.sleep(1) # 输入请假原因 self.base_page.find_byxpath('//*[@id="app"]/div/div[1]/div[6]/textarea').send_keys('请假的原因') time.sleep(2) # 浏览器页面需要向上滑动一下 self.base_page.swipeUp() time.sleep(2) # 点击提交按钮 # 提交按钮 = [90, 1695][990, 1830] self.base_page.by_TouchAction_dingwei(500, 1750) #请您确认请假时间确认弹框提示 # 确认 = [540,1245][1017,1365] self.base_page.by_TouchAction_dingwei(800,1300) time.sleep(3) #获取点击提交按钮后的提示 text = self.base_page.find_byxpath('/html/body/div[2]/div/div[2]/div[1]').text print('texttexttexttexttexttexttexttext') print(text) print('texttexttexttexttexttexttexttext') time.sleep(2) return text
class shangjishenpi_shenqing_peixunjia_page(BasePage): def __init__(self, appium_driver): self.base_page = BasePage(appium_driver) def shenqing_peixunjia_bohui(self): self.base_page.to_now_context('NATIVE_APP') time.sleep(3) # 点击请假 qingjia_button = self.base_page.find_byID_( 'com.flashexpress.backyard:id/_leave') qingjia_button.click() time.sleep(1) # 切换到webview下 view_now = 'WEBVIEW_com.flashexpress.backyard' self.base_page.to_now_context(view_now) cot = self.base_page.get_context() time.sleep(3) print(cot) print('点击请假类型前:') # 点击请假类型 try: elem = self.base_page.find_byxpath( '//*[@id="app"]/div/div[1]/div[1]/div/input') except: for i in range(3): elem.click() time.sleep(1) else: elem.click() cots = self.base_page.get_context() print(cots) print('点击请假类型后:') time.sleep(1) # 点击公司培训假(带薪)按钮,修改请假类型,只需要更改后边的li的下标 self.base_page.find_byClassAndTag('date-list', 'li', 0, 11).click() time.sleep(3) self.base_page.to_now_context(view_now) time.sleep(3) # 点击开始时间按钮 # self.base_page.find_byxpath('//*[@id="app"]/div/div[1]/div[2]/div/input').click() # self.base_page.find_byClassAndTag('mt-item-field-inner', 'input', 1, 0).click() # self.base_page.css_select("document.querySelector('.mt-item-input')").click() self.base_page.css_select('.mt-item-input')[1].click() time.sleep(1) self.base_page.to_now_context(view_now) time.sleep(3) print(self.base_page.get_context()) print('还没有点击时间25') # 点击24号,如果后续日期更换,只更换对于的坐标就可以了 ''' 位置信息 [318,1473][465,1608]''' a = read_yaml_file('shenqing_peixunjia_bohui', 'startTime') self.base_page.by_touchAction_uiautomator2(a[0], a[1]) time.sleep(1) # 点击确按钮 # 确定按钮位置 = [540,1260][1080,1380] self.base_page.by_touchAction_uiautomator2(800, 1300) print('点击了确定按钮') time.sleep(3) # 点击结束时间按钮 self.base_page.css_select('.mt-item-input')[2].click() time.sleep(2) # 点击25号,如果后续日期更换,只更换对于的坐标就可以了 # 坐标位置 = ''' 位置信息 [468,1473][615,1608]''' b = read_yaml_file('shenqing_peixunjia_bohui', 'endTime') self.base_page.by_touchAction_uiautomator2(b[0], b[1]) # self.base_page.css_select('document.querySelectorAll(".box-message")[21]').click() time.sleep(3) # 点击确按钮 # 确定按钮位置 = [540,1260][1080,1380] self.base_page.by_touchAction_uiautomator2(800, 1300) # self.base_page.css_select("document.querySelector('.picker-toolbar span.mint-datetime-action.mint-datetime-confirm')").click() time.sleep(2) # 输入请假原因 self.base_page.find_byxpath('//*[@id="app"]/div/div[1]/div[6]/textarea' ).send_keys('年假两天-请假的原因') time.sleep(2) # 浏览器页面需要向上滑动一下 self.base_page.swipeUp() time.sleep(2) # 点击提交按钮 # 提交按钮 = [90, 1695][990, 1830] self.base_page.by_touchAction_uiautomator2(500, 1750) # self.base_page.css_select('document.querySelector(".mint-button-text")').click() time.sleep(2) # 提交的确认弹框 # 确定按钮 = [540,1245][1017,1365] self.base_page.by_touchAction_uiautomator2(800, 1300) time.sleep(3) #请假成功后,退出账号22399,登入账号 22395 self.base_page.to_now_context('NATIVE_APP') time.sleep(3) self.base_page.find_byandroid_text('我的').click() time.sleep(1) self.base_page.find_byandroid_text('退出').click() time.sleep(1) self.base_page.find_byandroid_text('确定').click() # 登入账号 22395 usename = self.base_page.find_byID_( 'com.flashexpress.backyard:id/userName') usename.send_keys(22395) time.sleep(1) pwd = self.base_page.find_byID_( 'com.flashexpress.backyard:id/userPass') pwd.send_keys(123456) time.sleep(1) #点击确定按钮 time.sleep(1) self.base_page.find_byID_('com.flashexpress.backyard:id/login').click() #点击审批按钮 self.base_page.to_now_context('NATIVE_APP') time.sleep(3) ''' 底部导航栏是原生按钮 如果当前页面在可见审批导航栏页面,需要点击审批按钮,进入审批页面 点击我的申请按钮 点击待审批按钮,进入请假申请页面 页面向上滑动一次 点击撤销按钮 点击确认撤销提示的 确定按钮 点击页面的返回按钮,页面返回至审批页面 ''' # 点击审批按钮 try: ele = self.base_page.find_bytext('审批') except NoSuchElementException: for i in range(3): ele.click() time.sleep(1) else: ele.click() time.sleep(2) context_now = 'WEBVIEW_com.flashexpress.backyard' self.base_page.to_now_context(context_now) time.sleep(3) #点击我的审批按钮 wodeshenpi = self.base_page.find_byxpath('//*[@id="app"]/div/a[1]') print(wodeshenpi) wodeshenpi.click() #点击待审批按钮 '''[0,348][1080,822]''' self.base_page.to_now_context(context_now) time.sleep(5) self.base_page.by_touchAction_uiautomator2(500, 500) # self.base_page.css_ele_select("div.mint-cell-value.is-link").click() time.sleep(1) self.base_page.to_now_context(context_now) time.sleep(5) #页面滑动一次 self.base_page.swipeUp() #点击驳回按钮 //*[@id="pageTwo"]/div/div[1]/div[6]/span[1] [60,1602][510,1740] # self.base_page.find_byClassAndTag('mt-page-footer', 'span', 0, 0).click() self.base_page.by_touchAction_uiautomator2(400, 1700) time.sleep(3) self.base_page.to_now_context('WEBVIEW_com.flashexpress.backyard') time.sleep(5) #定位驳回原因输入框 //*[@id="pageTwo"]/div/div[1]/div[8]/div/div[2]/textarea [144,945][936,1248] self.base_page.to_now_context('NATIVE_APP') time.sleep(3) eles = self.base_page.find_byH5class("android.widget.EditText") eles.send_keys("培训假申请驳回的原因") time.sleep(1) #点击确定按钮 self.base_page.by_touchAction_uiautomator2(700, 1380) time.sleep(2)
def _logout(): logout_page = BasePage(driver) with allure.step('Logout step'): LOGGER.info('Logout') logout_page.wait_for_element_and_click(*LoginPageLocators.LOGOUT_BTN)
def __init__(self, driver): BasePage.__init__(self, driver) MixinFullSearchProduct.__init__(self)
def __init__(self, driver): BasePage.__init__(self, driver, "http://automationpractice.com/index.php?controller=order&step=2&multi-shipping=")