Appium app自动化测试经验分享-find_element_by_android_uiautomator ()【二】

2023-05-16

本文为博主原创,未经许可严禁转载。
本文链接:https://blog.csdn.net/zyooooxie/article/details/113868447

之前分享过 find_element_by_android_uiautomator () 【一】,最近做了些新学习,做个新分享。

个人博客:https://blog.csdn.net/zyooooxie

用法

在这里插入图片描述

find_element_by_android_uiautomator(uia_string)

作用:通过底层Android UiAutomator自动化测试框架定位控件。
参数:参数是UiAutomator的 UiSelector对象来定位。

官方文档 UiSelector

总结如下:

resource-id属性:
resourceId\resourceIdMatches

text属性:
text\textContains\textStartsWith\textMatches

className属性:
className\classNameMatches

description属性:
description\descriptionContains\descriptionMatches\descriptionStartsWith

fromParent:兄弟定位

Adds a child UiSelector criteria to this selector which is used to start search from the parent widget. Use this selector to narrow the search scope to sibling widgets as well all child widgets under a parent.

childSelector:父子定位

Adds a child UiSelector criteria to this selector. Use this selector to narrow the search scope to child widgets under a specific parent widget.

package属性:
packageName\packageNameMatches

index:序列【其父元素的第几个节点】

Set the search criteria to match the widget by its node index in the layout hierarchy. The index value must be 0 or greater. Using the index can be unreliable and should only be used as a last resort for matching. Instead, consider using the instance(int) method.

instance:实例【所有结果 里面的第几个元素】

Set the search criteria to match the widget by its instance number. The instance value must be 0 or greater, where the first instance is 0. For example, to simulate a user click on the third image that is enabled in a UI screen, you could specify a a search criteria where the instance is 2, the className(String) matches the image widget class, and enabled(boolean) is true. The code would look like this: new UiSelector().className(“android.widget.ImageView”) .enabled(true).instance(2);

多说一句:正则,xxxMatches,要做到所有内容 全匹配;【在UISlector使用所有的正则表达式相关的方法中都有效

代码

还是某Q极速版来举例;

操作流程:打开app-我-(右上角的)二维码-下方页面;

在这里插入图片描述

ANDROID_UIAUTOMATOR = ‘-android uiautomator’

File:page_wo.py


class PageWo(BaseMethod):
    # 我
    tab_wo = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().resourceId("com.csdn.zyooooxie:id/tab4")')

    # 右上角的二维码
    scan = (MobileBy.ANDROID_UIAUTOMATOR, 'resourceId("{}")'.format('com.csdn.zyooooxie:id/ivTitleScan'))

    # 我-断言的元素
    zyooooxie = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("zyooooxie")')

    # 二维码-断言的元素
    payment_text = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("付款")')

    # 我的二维码
    # text          我的二维码
    # resource-id   com.csdn.zyooooxie:id/ivTitleBtnLeft
    # class         android.widget.TextView【排序为0 故可用】
    # content-desc  向上导航
    
    # 父子节点  先定位父元素,通过父元素找儿子
    # 兄弟节点  通过兄弟元素,找到同一父级元素下的子元素

    # 上面是推荐的;下面是不太推荐的

    # package       com.csdn.zyooooxie 【包名感觉是 不单用,要组合用】
    # instance      int 【the first instance is 0】、【index_instance 推荐使用instance方法】
    # index         int 【be used as a last resort for matching】

    # text\textContains\textStartsWith\textMatches
    left_button_text0 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("我的二维码")')
    left_button_text1 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().textContains("我的二")')
    left_button_text2 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().textStartsWith("我的二维")')
    left_button_text3 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().textMatches(".的.+码$")')
    left_button_text4 = (MobileBy.ANDROID_UIAUTOMATOR, 'textMatches(".的.+码$")')

    # resourceId\resourceIdMatches
    left_button_id0 = (MobileBy.ANDROID_UIAUTOMATOR, 'resourceId("com.csdn.zyooooxie:id/ivTitleBtnLeft")')
    left_button_id1 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().resourceId("com.csdn.zyooooxie:id/ivTitleBtnLeft")')
    left_button_id2 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().resourceIdMatches("^com.+zyooooxie:id/ivTitleBtnLeft$")')

    # className\classNameMatches
    left_button_class0 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().className("android.widget.TextView")')
    left_button_class3 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().classNameMatches("^android.+TextView$")')
    left_button_class5 = (MobileBy.ANDROID_UIAUTOMATOR, 'className("android.widget.TextView")')

    # description\descriptionContains\descriptionMatches\descriptionStartsWith
    left_button_desc0 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().description("向上导航")')
    left_button_desc1 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().descriptionContains("上导航")')
    left_button_desc2 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().descriptionMatches("^向.+航$")')
    left_button_desc3 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().descriptionStartsWith("向上导")')
    left_button_desc5 = (MobileBy.ANDROID_UIAUTOMATOR, 'description("向上导航")')

    # fromParent:兄弟定位
    brother0 = ('-android uiautomator', 'resourceId("com.csdn.zyooooxie:id/qrcode_scanner_imageview").fromParent(resourceId("com.csdn.zyooooxie:id/qrcode_scanner_text"))')
    brother1 = ('-android uiautomator', 'new UiSelector().resourceId("com.csdn.zyooooxie:id/qrcode_group_charge_layout").fromParent(new UiSelector().resourceId("com.csdn.zyooooxie:id/qrcode_group_payment_layout"))')

    # childSelector:父子定位
    child0 = (MobileBy.ANDROID_UIAUTOMATOR, 'resourceId("com.csdn.zyooooxie:id/rlCommenTitle").childSelector(className("android.widget.TextView"))')
    child1 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().resourceId("com.csdn.zyooooxie:id/group_qrcode_charge_paymen_layout").childSelector(description("扫一扫"))')

    # instance 和 index 都是从0开始计数,

    # index: 后续定位方式是其本身 + index是其父元素的第几个节点
    index0 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().index(1).resourceId("com.csdn.zyooooxie:id/qrcode_group_charge_layout")')
    index1 = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().index(3).resourceId("com.csdn.zyooooxie:id/qrcode_group_payment_layout")')
    index2 = (MobileBy.ANDROID_UIAUTOMATOR, 'index(5).resourceId("com.csdn.zyooooxie:id/qrcode_scanner_layout")')
    index3 = (MobileBy.ANDROID_UIAUTOMATOR, 'index(1).text("扫一扫")')
    index4 = (MobileBy.ANDROID_UIAUTOMATOR, 'index(1).description("zyooooxie,扫一扫二维码,加我QQ。")')

    # instance:匹配的所有结果 里面的第几个元素
    instance0 = ('-android uiautomator', 'new UiSelector().instance(0).className("android.widget.TextView")')
    instance1 = ('-android uiautomator', 'new UiSelector().instance(1).classNameMatches(".+TextView$")')
    instance2 = ('-android uiautomator', 'instance(2).className("android.widget.TextView")')
    instance3 = ('-android uiautomator', 'instance(3).classNameMatches(".+TextView$")')

    instance10 = ('-android uiautomator', 'instance(2).className("android.widget.ImageView")')
    instance11 = ('-android uiautomator', 'new UiSelector().instance(0).className("android.widget.ImageView")')
    instance12 = ('-android uiautomator', 'new UiSelector().instance(3).classNameMatches("^android.+geView$")')
    instance13 = ('-android uiautomator', 'instance(1).classNameMatches("^android.+geView$")')

    # packageName\packageNameMatches
    left_button_package0 = ('-android uiautomator', 'new UiSelector().packageName("com.csdn.zyooooxie").text("我的二维码")')
    left_button_package1 = ('-android uiautomator', 'packageName("com.csdn.zyooooxie").resourceId("com.csdn.zyooooxie:id/ivTitleBtnLeft")')
    left_button_package2 = ('-android uiautomator', 'new UiSelector().packageName("com.csdn.zyooooxie").description("向上导航")')
    left_button_package10 = ('-android uiautomator', 'new UiSelector().packageNameMatches("com.+zyooooxie").textContains("的二维")')
    left_button_package11 = ('-android uiautomator', 'packageNameMatches("^com.+zyooooxie").className("android.widget.TextView")')
    left_button_package12 = ('-android uiautomator', 'new UiSelector().packageNameMatches("com.+zyooooxie$").descriptionStartsWith("向上")')
    fail_package20 = ('-android uiautomator', 'new UiSelector().packageName("000.11111111.222222").descriptionStartsWith("向上")')
    fail_package21 = ('-android uiautomator', 'new UiSelector().packageNameMatches("111.+22222").textContains("的二维")')

    def QR_code(self, driver):
        self.element_click(driver, *self.tab_wo)
        self.element_click(driver, *self.scan)


pytest.ini 文件:

在这里插入图片描述

@File:test_wo.py

class TestWo(PageWo):

    @pytest.mark.mark_text
    def test_text_0(self, driver):
        self.QR_code(driver)
        print(self.left_button_text0)
        self.element_click(driver, *self.left_button_text0)

        self.assert_FindElement(driver, *self.zyooooxie, the_time=5)

    @pytest.mark.mark_text
    def test_text_1(self, driver):
        self.QR_code(driver)
        print(self.left_button_text1)
        self.element_click(driver, *self.left_button_text1)
        self.assert_FindElement(driver, *self.zyooooxie, the_time=5)

    @pytest.mark.mark_text
    def test_text_2(self, driver):
        self.QR_code(driver)
        print(self.left_button_text2)
        self.element_click(driver, *self.left_button_text2)
        self.assert_FindElement(driver, *self.zyooooxie, the_time=5)

    @pytest.mark.mark_text
    def test_text_3(self, driver):
        self.QR_code(driver)
        print(self.left_button_text3)
        self.element_click(driver, *self.left_button_text3)
        self.assert_FindElement(driver, *self.zyooooxie, the_time=5)

    @pytest.mark.mark_text
    def test_text_4(self, driver):
        self.QR_code(driver)
        print(self.left_button_text4)
        self.element_click(driver, *self.left_button_text4)
        self.assert_FindElement(driver, *self.zyooooxie, the_time=5)

    @pytest.mark.mark_id
    def test_id_0(self, driver):
        self.QR_code(driver)
        print(self.left_button_id0)
        self.element_click(driver, *self.left_button_id0)
        self.assert_FindElement(driver, *self.zyooooxie, the_time=5)

    @pytest.mark.mark_id
    def test_id_1(self, driver):
        self.QR_code(driver)
        print(self.left_button_id1)
        self.element_click(driver, *self.left_button_id1)
        self.assert_FindElement(driver, *self.zyooooxie, the_time=5)

    @pytest.mark.mark_id
    def test_id_2(self, driver):
        self.QR_code(driver)
        print(self.left_button_id2)
        self.element_click(driver, *self.left_button_id2)
        self.assert_FindElement(driver, *self.zyooooxie, the_time=5)

    @pytest.mark.mark_class
    def test_class_0(self, driver):
        self.QR_code(driver)
        print(self.left_button_class0)
        self.element_click(driver, *self.left_button_class0)
        self.assert_FindElement(driver, *self.zyooooxie, the_time=5)

    @pytest.mark.mark_class
    def test_class_3(self, driver):
        self.QR_code(driver)
        print(self.left_button_class3)
        self.element_click(driver, *self.left_button_class3)
        self.assert_FindElement(driver, *self.zyooooxie, the_time=5)

    @pytest.mark.mark_class
    def test_class_5(self, driver):
        self.QR_code(driver)
        print(self.left_button_class5)
        self.element_click(driver, *self.left_button_class5)
        self.assert_FindElement(driver, *self.zyooooxie, the_time=5)

    @pytest.mark.mark_desc
    def test_desc_0(self, driver):
        self.QR_code(driver)
        print(self.left_button_desc0)
        self.element_click(driver, *self.left_button_desc0)
        self.assert_FindElement(driver, *self.zyooooxie, the_time=5)

    @pytest.mark.mark_desc
    def test_desc_1(self, driver):
        self.QR_code(driver)
        print(self.left_button_desc1)
        self.element_click(driver, *self.left_button_desc1)
        self.assert_FindElement(driver, *self.zyooooxie, the_time=5)

    @pytest.mark.mark_desc
    def test_desc_2(self, driver):
        self.QR_code(driver)
        print(self.left_button_desc2)
        self.element_click(driver, *self.left_button_desc2)
        self.assert_FindElement(driver, *self.zyooooxie, the_time=5)

    @pytest.mark.mark_desc
    def test_desc_3(self, driver):
        self.QR_code(driver)
        print(self.left_button_desc3)
        self.element_click(driver, *self.left_button_desc3)
        self.assert_FindElement(driver, *self.zyooooxie, the_time=5)

    @pytest.mark.mark_desc
    def test_desc_5(self, driver):
        self.QR_code(driver)
        print(self.left_button_desc5)
        self.element_click(driver, *self.left_button_desc5)
        self.assert_FindElement(driver, *self.zyooooxie, the_time=5)

    @pytest.mark.mark_index_instance
    def test_index_0(self, driver):
        self.QR_code(driver)
        self.assert_FindElement(driver, *self.payment_text, the_time=5)
        print(self.index0)

        attr_name = self.driver_find_element_and_wait(driver, *self.index0).get_attribute("name")
        print(attr_name)

        name = '收款'
        assert attr_name == name

    @pytest.mark.mark_index_instance
    def test_index_1(self, driver):
        self.QR_code(driver)
        self.assert_FindElement(driver, *self.payment_text, the_time=5)

        print(self.index1)
        attr_name = self.driver_find_element_and_wait(driver, *self.index1).get_attribute("name")
        print(attr_name)

        name = '付款'
        assert attr_name == name

    @pytest.mark.mark_index_instance
    def test_index_2(self, driver):
        self.QR_code(driver)
        self.assert_FindElement(driver, *self.payment_text, the_time=5)

        print(self.index2)
        attr_name = self.driver_find_element_and_wait(driver, *self.index2).get_attribute("name")
        print(attr_name)

        name = '扫一扫'
        assert attr_name == name

    @pytest.mark.mark_index_instance
    def test_index_3(self, driver):
        self.QR_code(driver)
        self.assert_FindElement(driver, *self.payment_text, the_time=5)

        print(self.index3)
        attr_id = self.driver_find_element_and_wait(driver, *self.index3).get_attribute("resourceId")
        print(attr_id)

        assert_id = 'com.csdn.zyooooxie:id/qrcode_scanner_text'
        assert assert_id == attr_id

    @pytest.mark.mark_index_instance
    def test_index_4(self, driver):
        self.QR_code(driver)
        self.assert_FindElement(driver, *self.payment_text, the_time=5)

        print(self.index4)
        attr_class = self.driver_find_element_and_wait(driver, *self.index4).get_attribute("className")
        print(attr_class)
        assert 'android.widget.ImageView' == attr_class

    @pytest.mark.mark_index_instance
    def test_instance_0(self, driver):
        self.QR_code(driver)
        self.assert_FindElement(driver, *self.payment_text, the_time=5)

        print(self.instance0)
        attr_text = self.driver_find_element_and_wait(driver, *self.instance0).get_attribute("text")
        print(attr_text)

        text = '我的二维码'
        assert attr_text == text

    @pytest.mark.mark_index_instance
    def test_instance_1(self, driver):
        self.QR_code(driver)
        self.assert_FindElement(driver, *self.payment_text, the_time=5)

        print(self.instance1)
        attr_text = self.driver_find_element_and_wait(driver, *self.instance1).get_attribute("text")
        print(attr_text)

        text = '收款'
        assert attr_text == text

    @pytest.mark.mark_index_instance
    def test_instance_2(self, driver):
        self.QR_code(driver)
        self.assert_FindElement(driver, *self.payment_text, the_time=5)

        print(self.instance2)
        attr_text = self.driver_find_element_and_wait(driver, *self.instance2).get_attribute("text")
        print(attr_text)

        text = '付款'
        assert attr_text == text

    @pytest.mark.mark_index_instance
    def test_instance_3(self, driver):
        self.QR_code(driver)
        self.assert_FindElement(driver, *self.payment_text, the_time=5)

        print(self.instance3)
        attr_text = self.driver_find_element_and_wait(driver, *self.instance3).get_attribute("text")
        print(attr_text)

        text = '扫一扫'
        assert attr_text == text

    @pytest.mark.mark_index_instance
    def test_instance_10(self, driver):
        self.QR_code(driver)
        self.assert_FindElement(driver, *self.payment_text, the_time=5)

        print(self.instance10)
        attr_id = self.driver_find_element_and_wait(driver, *self.instance10).get_attribute("resourceId")
        print(attr_id)

        res_id = 'com.csdn.zyooooxie:id/qrcode_group_payment_imageview'
        assert attr_id == res_id

    @pytest.mark.mark_index_instance
    def test_instance_11(self, driver):
        self.QR_code(driver)
        self.assert_FindElement(driver, *self.payment_text, the_time=5)

        print(self.instance11)
        attr_id = self.driver_find_element_and_wait(driver, *self.instance11).get_attribute("resourceId")
        print(attr_id)

        res_id = 'com.csdn.zyooooxie:id/qrcode_card_body'
        assert attr_id == res_id

    @pytest.mark.mark_index_instance
    def test_instance_12(self, driver):
        self.QR_code(driver)
        self.assert_FindElement(driver, *self.payment_text, the_time=5)

        print(self.instance12)
        attr_id = self.driver_find_element_and_wait(driver, *self.instance12).get_attribute("resourceId")
        print(attr_id)

        res_id = 'com.csdn.zyooooxie:id/qrcode_scanner_imageview'
        assert attr_id == res_id

    @pytest.mark.mark_index_instance
    def test_instance_13(self, driver):
        self.QR_code(driver)
        self.assert_FindElement(driver, *self.payment_text, the_time=5)

        print(self.instance13)
        attr_id = self.driver_find_element_and_wait(driver, *self.instance13).get_attribute("resourceId")
        print(attr_id)

        res_id = 'com.csdn.zyooooxie:id/qrcode_group_charge_imageview'
        assert attr_id == res_id

    @pytest.mark.mark_package
    def test_package_0(self, driver):
        self.QR_code(driver)
        print(self.left_button_package0)
        self.element_click(driver, *self.left_button_package0)
        self.assert_FindElement(driver, *self.zyooooxie, the_time=5)

    @pytest.mark.mark_package
    def test_package_1(self, driver):
        self.QR_code(driver)
        print(self.left_button_package1)
        self.element_click(driver, *self.left_button_package1)
        self.assert_FindElement(driver, *self.zyooooxie, the_time=5)

    @pytest.mark.mark_package
    def test_package_2(self, driver):
        self.QR_code(driver)
        print(self.left_button_package2)
        self.element_click(driver, *self.left_button_package2)
        self.assert_FindElement(driver, *self.zyooooxie, the_time=5)

    @pytest.mark.mark_package
    def test_package_3(self, driver):
        self.QR_code(driver)
        print(self.left_button_package10)
        self.element_click(driver, *self.left_button_package10)
        self.assert_FindElement(driver, *self.zyooooxie, the_time=5)

    @pytest.mark.mark_package
    def test_package_4(self, driver):
        self.QR_code(driver)
        print(self.left_button_package11)
        self.element_click(driver, *self.left_button_package11)
        self.assert_FindElement(driver, *self.zyooooxie, the_time=5)

    @pytest.mark.mark_package
    def test_package_5(self, driver):
        self.QR_code(driver)
        print(self.left_button_package12)
        self.element_click(driver, *self.left_button_package12)
        self.assert_FindElement(driver, *self.zyooooxie, the_time=5)

    @pytest.mark.mark_package
    def test_package_6(self, driver):
        self.QR_code(driver)
        print(self.fail_package20)
        self.element_click(driver, *self.fail_package20)
        self.assert_FindElement(driver, *self.zyooooxie, the_time=5)

    @pytest.mark.mark_package
    def test_package_7(self, driver):
        self.QR_code(driver)
        print(self.fail_package21)
        self.element_click(driver, *self.fail_package21)
        self.assert_FindElement(driver, *self.zyooooxie, the_time=5)

    @pytest.mark.mark_child_parent
    def test_parent0(self, driver):
        self.QR_code(driver)
        print(self.brother0)
        # text有值、content-desc无值
        print(self.driver_find_element_and_wait(driver, *self.brother0).get_attribute("text"))

        self.assert_FindElement(driver, *self.payment_text, the_time=5)

    @pytest.mark.mark_child_parent
    def test_parent1(self, driver):
        self.QR_code(driver)
        print(self.brother1)
        # content-desc有值、text无值
        print(self.driver_find_element_and_wait(driver, *self.brother1).get_attribute("name"))

        self.assert_FindElement(driver, *self.payment_text, the_time=5)

    @pytest.mark.mark_child_parent
    def test_child0(self, driver):
        self.QR_code(driver)
        print(self.child0)
        self.element_click(driver, *self.child0)
        self.assert_FindElement(driver, *self.zyooooxie, the_time=5)

    @pytest.mark.mark_child_parent
    def test_child1(self, driver):
        self.QR_code(driver)
        print(self.child1)
        self.assert_FindElement(driver, *self.payment_text, the_time=5)

        self.element_click(driver, *self.child1)

if __name__ == '__main__':
    # pytest.main(['-s', '-v', 'test_wo.py', '-m', 'mark_id or mark_text'])
    # pytest.main(['-s', '-v', 'test_wo.py', '-m', 'mark_index_instance'])
    # pytest.main(['-s', '-v', 'test_wo.py'])
    pytest.main(['-v', 'test_wo.py', '--reruns', '2', '--reruns-delay', '5'])


执行结果

在这里插入图片描述

在这里插入图片描述

交流技术 欢迎+QQ 153132336 zy
个人博客 https://blog.csdn.net/zyooooxie

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Appium app自动化测试经验分享-find_element_by_android_uiautomator ()【二】 的相关文章

  • 简单对话框中的 ViewPager

    我想在对话框中使用 ViewPager 但失败了 这是所有代码 对话框中显示两个片段 Layouts main xml
  • 从SQLite列中获取所有数字字符串并进行总和计算

    我是 Android 和 SQLite 的新手 我在 SQLite 中有一个只有数字的 AMOUNT 列 我可以在 ListView 中显示它 但我无法找到任何我理解的方法来将它们全部添加并显示在 TextView 中 这是数据库助手 im
  • 您的手机中未安装应用程序

    我在模拟器中运行该应用程序 它成功运行 并且应用程序的图标显示在模拟器菜单中 但是当我尝试从模拟器菜单再次运行该应用程序时 它不允许我从中运行并显示 Toast 您的手机中未安装应用程序 在图像中 红色圆形是我的应用程序图标 如果您有您的M
  • FCM:无法实例化接收器 com.google.firebase.iid.FirebaseInstanceIdReceiver:

    仅在 Oreo 8 0 中接收推送通知时应用程序崩溃 java lang RuntimeException Unable to instantiate receiver com google firebase iid FirebaseIns
  • 错误:链接引用失败。 -> 排队作业

    我正在使用 Kotlin 学习 Android Material Design 一切都很顺利 直到我尝试使用 android support design widget FloatingActionButton 当我重建项目时 我收到以下错
  • onScale 和 Canvas - 缩放图像后如何调整原点?

    我有一个非常简单的测试应用程序 带有自定义组件MyView java https github com afarber android newbie blob master TestScroll src de afarber testscr
  • 如何在android中使用retrofit访问404错误?

    我正在使用改造 2 访问 REST API 以使用原始正文插入 JSON 数据 我从服务器获得成功响应 但在响应时收到 404 错误 我想访问404错误请帮我解决这个问题 ApiUtil getServiceClass sendFinalC
  • 将网页保存到android中的webview缓存中

    我正在创建一个应用程序 它将从互联网下载一些网页 并在用户单击按钮时将它们保存到缓存 并在没有互联网可用时加载它们 当我运行代码时 出现空指针异常 我已在清单文件中添加了所有必要的权限 public class MainActivity e
  • 我从 String placeName = placeText.getText().toString(); 收到空指针异常

    您好 想从编辑文本中获取地名并在地图上标记 这是我的代码 其中出现空指针异常 请帮助我应该做什么以及哪里出错了 因为我从对话框中的编辑文本字段获取地名 View layout View inflate this R layout alert
  • 我想使用对话框显示两个数字选择器

    我试图仅使用 java 在对话框上显示两个数字选择器 代码正在工作 但我无法将其排列为相等的宽度 这是我的代码 RelativeLayout relative new RelativeLayout mContext final Number
  • 带有 ListTiles 和按钮行的 Flutter 下拉菜单

    我正在尝试构建一个自定义下拉菜单 如下所示 我已经成功地实现了ListTiles and Row of Buttons没有下拉菜单 但我不确定如何将所有内容嵌套在下拉菜单类中 这是我到目前为止所得到的 class HomePage exte
  • MediaStyle 通知未响应 RemoteControl 事件。

    我们正在将正在进行的播放通知迁移到 Lollipop 中引入的 MediaStyle 通知 RemoteControlClient 似乎已被弃用 并且 MediaStyle 通知不处理媒体按钮事件 例如通过耳机远程暂停 播放 有人得到这个工
  • Firebase API 初始化失败,java.lang.reflect.InitationTargetException

    我在我的应用程序中使用 firebase 身份验证 数据库和存储服务 之前运行良好 我已经添加了 firebase 云消息传递设置 如文档中所述 但应用程序在运行时崩溃了 我调查了这个问题大约 4 个小时并尝试了不同的解决方案 就像保持所有
  • 如何从MediaCodec获取解码格式?

    我正在与MediaCodec 我用它来解码 mp4 video MediaCodec 将视频解码为YUV格式 但我需要得到RGBA 一切都很好 但我发现有几种可能的格式 例如YUV420 YUV422等等 因此 据我所知 要进行转换 我需要
  • 找不到元素“android.support.constraint.ConstraintLayout”的声明

    我创建了一个名为的 xml 文件activity main sw50dp 但是当我尝试验证它时 它给了我错误 错误 4 42 cvc elt 1 a 找不到元素 android support constraint ConstraintLa
  • 如何在按下硬件主页按钮时关闭所有活动?

    我有一个应用程序 其中有 5 个活动 一个菜单活动和另外 4 个子活动附加到菜单屏幕 所以我可以选择任何活动 然后返回菜单 假设我像这样四处走动 菜单 gt 活动 1 gt 菜单 gt 活动 3 gt 活动 2 gt 菜单 现在我按 主页
  • Android 处理 ListView 中的多个 EditText 字段

    只是一个基本问题 如果我有几十个 EditText 字段是 ListAdapter 的一部分 那么各个 EditText 字段如何知道它们属于哪一行 目前我正在使用 TextWatcher 来监听文本输入 我尝试扩展 TextWatcher
  • 如何调试仅在发布模式下崩溃的 Android 应用程序

    在调试模式下一切正常 但在发布模式下崩溃 调试模式下有哪些所需权限在发布模式下未打开 EDIT 当我将 链接 设置为 无 时 我会通过第一个屏幕进入 登录 屏幕 但是 当我添加发布权限时Internet 第一次尝试读取远程实体框架核心表时它
  • 新的 Android 项目未创建布局或 Java 文件

    这两天我一直在尝试简单地阅读 Big Nerd Ranch Android 编程书 第一章的前几页 我的问题的要点是 当我创建新的 Android 应用程序时 不会创建布局或 java 文件 我已经从 Android 开发站点安装了 ADT
  • 加载 highchart 时 Android 错误膨胀类

    我正在尝试加载highcharts via Dialog 下面是我的代码 Gradle implementation com highsoft highcharts highcharts 9 0 1 XML

随机推荐

  • 解决Vim插入模式下backspace按键无法删除字符的问题

    最近使用某个服务器编辑文件时 xff0c 快捷键i进入插入模式后 xff0c 下方不出现insert模式 xff0c 却可以插入字符 xff0c 但是backspace按键不能删除字符了 xff0c 最终google解决了此问题 xff0c
  • Kafka集群搭建详细步骤

    Kafka集群搭建 1 Kafka的安装需要java环境 xff0c cent os 7自带java1 6版本 xff0c 可以不用重新安装 xff0c 直接使用自带的jdk 即可 xff1b 如果觉得jdk版本太旧 xff0c 也可以自己
  • sublime text 3 打造python3环境(代码自动补全,运行程序,高亮显示)

    最近用python3用的比较多 xff0c 于是整理一下环境 xff0c 此博客仅记录下自己构造python3环境的过程 xff08 sublime text 3版本为3176 xff09 xff1a 安装的一些常用插件和配置过程如下 xf
  • 关于驱动程序的可移植性

    差不多所有的linux内核设备驱动都可以运行在不止一种处理器上 这仅仅因为设备驱动作者遵循一些重要规则 这些规则包括使用合适的变量类型 xff0c 而不是依赖于特定内存页大小 xff0c 提防外部数据的大小端模式 xff0c 设立合适的数据
  • centos7 安装mysql详细流程

    工作中经常需要安装mysql xff0c 每次安装的时候 xff0c 总是用不同的方法安装 xff0c 有错误就解决一下 xff0c 今天又重新装了一次mysql xff0c 记录下过程 xff0c 以后就用这种方式安装了 xff01 1
  • 10000端口无法运行

    1 查询端口 netstat ano findstr 10000 2 查询端口名 tasklist findstr 1572 3 关闭端口 taskkill pid 1572 F
  • Cmake编译-CMAKE_C_COMPILER-NOTFOUND解决

    第一次写博客 xff0c 其实就是记录一下从零开始的学习之路上遇到的各种 bug xff0c 一方面为了防止忘了犯过的错误 xff08 比如下一次 xff09 xff1b 另一方面为了从错误中汲取经历 分析 bug 之前 xff0c 记录一
  • libcurl官方实例代码(HTTP,FTP,上传下载等等)

    http curl haxx se libcurl c example html Some of the Examples simple HTTP simple c shows how to get a remote web page in
  • stm32驱动NRF24L01_原理+代码解析

    目录 概念 废话篇 xff08 24L01简介 xff09 引脚分配 工作模式 通信地址理解 xff08 个人疑难点 xff09 原理分析 寄存器赏析 寄存器操作指令 配置寄存器 xff08 CONFIG xff0c 位置 xff1a 0X
  • CSS实现进度条和订单进度条

    由于近期需要做一个订单进度条 xff0c 比较直观的反应当前订单的状态 xff0c css样式借鉴了网上的相关代码 xff0c 下面是效果图 xff0c 以及实现说明 一 说明 1 首先页面需要引入jQuery的相关js 一般页面都已经引入
  • ROS中CANopen的使用(1)

    ROS中CANopen的使用 xff08 1 xff09 今天终于实现了通过ros来控制无人车 xff0c 心情非常激动 xff0c 先简要记录 工作环境 工控机使用的Ubuntu18 02 xff0c can卡采用的innodisk的UC
  • 组合导航在ROS中的解析(2)

    工作环境 ubuntu18 02 xff0c 组合导航使用网口接口 xff0c ros使用melodic实现过程 include lt ros ros h gt include lt stdio h gt include lt stdlib
  • 上位机与下位机进行交互

    一 上位机与下位机 xff08 1 xff09 什么是上位机 上位机是指可以直接发出操控命令的计算机 这里使用的是winfrom xff08 2 xff09 什么是下位机 下位机是指直接控制设备获取状况的计算机 xff0c 一般是PLC 单
  • alist无法访问文件 提示“failed get link ”这样修复

    阿里网盘挂载alist无法访问文件 xff0c 提示 failed get link invalid X Device Id xff1f 34 Failed get link invalid X Device Id 34 是挂载阿里云网盘到
  • STM32F4应用-串口通信

    STM32F4应用 串口通信 1 基本介绍1 1 简介1 2 串口协议1 3 通信过程 2 配置过程2 1 引脚复用2 2 配置步骤2 3 例子 参考文献 1 基本介绍 1 1 简介 串口通信涉及USART TX RX xff0c GND三
  • 使用ADB命令来停用、卸载荣耀20 PRO的系统应用

    今年双十一买了部荣耀20 Pro手机 xff0c 某天感觉某个系统应用 系统更新 贼烦人 xff0c 过段时间就提醒一次 xff1b 我就被逼着上网搜有没有思路 xff0c 然后就打开了罪恶的大门 个人博客 xff1a https blog
  • Python笔记【二】

    之前分享过一次我在学习Python的笔记 xff0c Python笔记 一 xff0c 最近有些新的收获 xff0c 分享一下 xff1b 个人博客 xff1a https blog csdn net zyooooxie random sa
  • Fiddler 使用命令行和Filters

    本文为博主原创 xff0c 未经许可严禁转载 本文链接 xff1a https blog csdn net zyooooxie article details 109020837 之前分享过一期 Fiddler断点 修改响应数据 xff0c
  • 代码改变生活-使用You-Get下载bilibili的视频【一】

    本文为博主原创 xff0c 未经许可严禁转载 本文链接 xff1a https blog csdn net zyooooxie article details 111307733 这篇分享是我在csdn的第100篇原创了 xff0c 真的是
  • Appium app自动化测试经验分享-find_element_by_android_uiautomator ()【二】

    本文为博主原创 xff0c 未经许可严禁转载 本文链接 xff1a https blog csdn net zyooooxie article details 113868447 之前分享过 find element by android