问答 请问一下运行 UI 自动化的时候,登陆之后的操作该怎么进行,登录之后,后面的操作无法进行,是要重新打开浏览器吗

花浅言 · 2022年02月24日 · 最后由 花浅言 回复于 2022年02月28日 · 3221 次阅读
class WebKey(object):

    def __init__(self, txt, timeout=30):
        # 构造函数,创造必要的实例变量
        if txt == 'gg':
            self.driver = webdriver.Chrome()
            self.driver.maximize_window()
            self.driver.implicitly_wait(timeout)
        elif txt == 'ff':
            self.driver = webdriver.Firefox()
            self.driver.maximize_window()
            self.driver.implicitly_wait(timeout)
        elif txt == 'ie':
            self.driver = webdriver.Ie()
            self.driver.maximize_window()
            self.driver.implicitly_wait(timeout)
        else:
            print("浏览器暂不支持")
            pass

    def load_url(self, url=None):
        """
        打开网站
        :param url: 网站地址
        :return:
        """
        self.driver.get(url)

# 登录业务
def login_busin(user, passwd):
    br = WebKey()
    br.open_br(br="gg")
    br.open_url(URL)
    br.sleep(tm=1)
    br.send_key(section='LoginAccountElements', option='username', data=user)
    br.send_key(section='LoginAccountElements', option='password', data=passwd)
    picture_address = br.screenshot(os.path.join(img_address, str(int(time.time())) + ".png"))
    text = read_image.ocr(picture_address)
    br.send_key(section='LoginAccountElements', option='Verification', data=text)
    br.click(section='LoginAccountElements', option='Login')
    br.sleep(tm=1)
    br.sleep(5)
    # br.close()

if __name__ == '__main__':
    pass
# 添加业务
class add_actual_pop(WebKey):

    def add_actual_population(self, name, phone, id_card):
        self.click(section="HomePageElements", option="Basic_database")
        self.click(section="Basic_database_main", option="add_Basic_population")
        self.send_key(section="add_Basic_population_jump", option="name", data=name)
        self.click(section="add_Basic_population_jump", option="date_birth")
        self.send_key(section="add_Basic_population_jump", option="date_birth_input", data="2011-01-11")
        pyautogui.typewrite(['enter'])
        self.click(section="add_Basic_population_jump", option="Current_address")
        self.send_key(section="add_Basic_population_jump", option="Current_address_search", data='舟山市岱山县驸马宫前西南约150米')
        self.click(section="add_Basic_population_jump", option="Current_address_query")
        self.click(section="add_Basic_population_jump", option="Current_address_click")
        self.click(section="add_Basic_population_jump", option="Current_address_confirm")
        self.click(section="add_Basic_population_jump", option="House_registration")
        self.click(section="add_Basic_population_jump", option="House_registration_register")
        self.click(section="add_Basic_population_jump", option="gender")
        self.click(section="add_Basic_population_jump", option="male")
        self.send_key(section="add_Basic_population_jump", option="phone_num", data=phone)
        self.send_key(section="add_Basic_population_jump", option="id_card", data=id_card)
        self.click(section="add_Basic_population_jump", option="entry_status")
        self.click(section="add_Basic_population_jump", option="entry_status_atypism")
        self.click(section="add_Basic_population_jump", option="confirm")
        self.sleep(tm=10)
        self.close()


if __name__ == '__main__':
    pass
# 用例

@pytest.fixture()
def test_login():        #登录用例
    login_busin(user="ctz", passwd="admin123456?")


def test_add_actual_pop(test_login):        # 添加用例
    add_actual_pop().add_actual_population(name="原始人", phone="15255225552", id_card="420101199706214387")

if __name__ == '__main__':
    pass

共收到 7 条回复 时间 点赞

登录之后会跳转到其他业务页面,直接操作即可,不需要重新打开浏览器;后面操作无法进行的原因是?元素找不到?

薄暮 回复

是的,我登录后就到了首页,然后再运行另一个用例时要点击首页上的按钮,提示找不到元素,所以想到有可能是登录和登录后操作没有关联

如果我没有理解错,你应该没有把 driver 传过去你跳转后的方法,你的添加业务方法的 self 指的是 driver 吧。WebKey 是你自己封装的 webdriver 类么?信息不太全啊

王德法 回复

还是报错的

    def add_actual_population(self, name, phone, id_card):
>       self.driver.click(section="HomePageElements", option="Basic_database")
E       AttributeError: 'NoneType' object has no attribute 'click'

如果要把登录操作作为前置操作 需要放在 conftest.py 文件里。你在一个文件上运行登录和添加业务,按 pytest 的默认案例执行顺序规则,会先运行 test_add_actual_pop

tester_zhang 回复

ok,了解了,谢谢您的回答

花浅言 关闭了讨论 03月04日 17:50
需要 登录 後方可回應,如果你還沒有帳號按這裡 注册