学习appcrawler有些疑问,请求解答

《主问题》
1.testcase支持写多个- xpath,执行顺序是什么样的?
2.如何加断言?
3.selenium的capability在哪里配置?
4.selenium的使用与appium使用还有哪些不一样的地方?
5.元素属性 clickable 本身就为 false 或者它的父节点等都为 false,这样自然是无法遍历到的,如何解决?
PS:app这块暂时未学习
《附加UI自动化问题》
问题一:
同一元素用有时候能点击成功,有时候报错“ElementClickInterceptedException”,是什么原因,如何辨别这类元素,如下图:


问题二:下面三个语句分别有什么区别以及分别在哪些场景里用
self.driver.execute_script(“arguments[0].click();”, ele)
ActionChains(self.driver).move_to_element(ele).click(ele).perform()
ele.click()
问题三:UI自动化直播实践最后一期,关于teardown_class里怎么写浏览器退出比较合适,我写的浏览器退出,要不就是退出失败,要不就是执行完用例后会自动打开一个新窗口然后再退出所有浏览器,我现在想要的效果是执行完用例就可以直接关闭浏览器,而不是打开一个新窗口后再关闭
问题四:企业微信页面读取cookies文件登录失败,是代码有哪些地方需要优化吗?(PS:已验证单独写个函数读取cookie登录是成功的)

    # _BASE_URL="https://work.weixin.qq.com/wework_admin/frame"
    def login(self):
        self.driver.delete_all_cookies()
        self.driver.get("https://work.weixin.qq.com/wework_admin/frame")
        with open("../data/cookies.yaml", "r", encoding='u8') as f:
            cookies = yaml.safe_load(f)
        for i in cookies:
            self.driver.add_cookie(i)
        self.driver.refresh()
        return HomePage(self.driver)```
报错信息:
FAILED
practice\prepare_ui1\testcases\test_addmember.py:20 (TestAddMember.test_addmember)
self = <study202208.practice.prepare_ui1.testcases.test_addmember.TestAddMember object at 0x00000245F0500DF0>

    def test_addmember(self):
>       result=self.home.click_add_member().fillinfo_member(self.membername,self.ssn,self.phone_number).get_tips_member()
self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x00000245F053CEB0>
response = {'status': 404, 'value': '{"value":{"error":"no such element","message":"no such element: Unable to locate element: {\...\n\\tRtlGetAppContainerNamedObjectPath [0x76F47A9E+286]\\n\\tRtlGetAppContainerNamedObjectPath [0x76F47A6E+238]\\n"}}'}
>       raise exception_class(message, screen, stacktrace)
E       selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[text()='添加成员']"}
E         (Session info: chrome=103.0.5060.114)
  1. testcase中的多个语句,执行顺序就是按照写的顺序 从上到下依次执行的 如果有失败就结束并跳过后续步骤
  2. 断言可以用语句里的then作为单步断言 或者使用assertGlobal做全局断言
  3. 没有要求元素是clickable才能点击 你只要把它选入selectlist 并且没有在blacklist里面跳过它就可以点击到

问题一: ElementClickInterceptedException是因为元素被其他元素遮挡了,导致它并不是在页面最上层,点击的时候就无法直接点击到,这个可能要确认一下是不是页面会有弹出框、遮挡层等元素导致了此类情况的发生
问题二: 一般来说js语句效果是最好的但是语句维护会比较困难,中间的鼠标动作可以触发一些鼠标移入的js效果,如果没有特殊需要的话用最普通的click就可以

这个报错是元素没找到,检查下定位,当前页面对不对

  • 退出浏览器,在teardown_class中直接调用cls.driver.quit()就可以了,不知道你问题描述中的这几个情况,代码中是怎么实现的?这个主要需要看你的driver本身是在哪创建保存的,如果是在setup_class中创建并且保存到cls.driver中应该就没有问题。
  • 如果还有问题的话,可以发一下代码的仓库地址,看一下具体实现方式在哪有问题