APP UI 自动化测试 H5页面元素定位

使用 uc-devtools 代替 uiautomatorviewer 查找定位H5元素

由于uiautomatorviewer 只能定位APP原生页面;

所以要定位app H5 页面内的元素 使用 uc-devtools 工具

要调试的Android 设备上已安装UC浏览器(Android 开发者版):下载地址

安装成功如如显示:

usb链接调试手机并打开要调试定位的H5 webview 页面

然后在chrome浏览器内 输入 chrome://inspect/

浏览器内出现H5页面后,点击 inspect  就会打开 uc-devtools 工具,选中元素根据css/xpath方式定位即可


driver 配置

需要指定 chromedriver 指定版本的路径;(下面时yaml格式的配置,直接使用请删除注释)

appActivity: com.kk.duoku.ui.activitys.MainActivity
appPackage: com.coolclub.dk
deviceName: 8BNGK17907000030
noReset: 'True'
platformName: Android
platformVersion: '9'
resetKeyboard: 'True'
unicodeKeyboard: 'True'
automationName: 'UiAutomator2'
# 是否显示chromedriver的日志
showChromedriverLog: 'False'
#  H5元素定位必须
chromeOptions:
  androidProcess: org.chromium.content.app.Sandb
# chromedriver对应版本的绝对路径
chromedriverExecutableDir: D:\soft_install\Appium-windows-1.21.0\resources\app\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win

启动appium时 开启自动下载chromedriver命令:

上一步指定 chromedriverExecutableDir,然后按照下面的命令启动appiu server 。 这样就不用关注什么chrome驱动版本关系了,haha .

appium --allow-insecure chromedriver_autodownload

获取页面context

def base_get_contexts(self):
        """
        获取当前所有 contexts
        :return: list, 所有 contexts
        """
        return self.driver.contexts


def base_get_current_context(self):
        """
        返回当前页面的 context
        :return: str, 当前页面的 context
        """
        return self.driver.current_context

原生页面与H5页面的切换

def base_swith_to_content_by_index(self, index):
        """
        根据driver.contexts下标,切换到指定的 content
        :param index: contents列表角标
        :return:
        """
        self.driver.switch_to.context(self.base_get_contexts[index])


def base_swtich_to_content_by_context(self, context):
        """
        切换到指定的 context
        :param context: str格式,self.driver.contexts[1]
        :return:
        """
        self.driver.switch_to.context(context)

H5元素定位及操作

from appium.webdriver.common.touch_action import TouchAction
from selenium.webdriver import ActionChains
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions


def base_click_location(self, x, y):
        """
        点击指定坐标位置
        :param x: x坐标
        :param y: y坐标
        :return:
        """
        TouchAction(self.driver).press(x=x, y=y).release().perform()
        time.sleep(1)

def base_clicks(self, index, arg):
        """
        指定角标,点击多个元素内的某一个
        :param args: 元素定位方式, (By, XPATH)
        :param index: 角标
        :return:
        """
        elements = self.base_find_elements(arg)
        elements[index].click()
        time.sleep(1)

def base_get_h5_view_title(self, full_title):
        """
        判断页面标题是否完全一致
        :param title: 页面标题
        :return: True/False
        """
        return self.base_find_element_expected(expected_conditions.title_is(title=full_title))

def base_get_h5_view_contain_title(self, division_title):
        """
        判断页面标题是否包含输入的标题
        :param division_title: 输入的标题
        :return: True/False
        """
        return self.base_find_element_expected(expected_conditions.title_contains(title=division_title))

def base_get_h5_view_selected_to_not(self, element):
        """
        判断指定元素是否被选中
        :param element: 元素定位方式
        :return: True/False
        """
        return self.base_find_element_expected(expected_conditions.element_to_be_selected(element))

def base_get_h5_view_alerted(self):
        """
        判断页面元素有没有 alert
        :return: alert 元素对象
        """
        return self.base_find_element_expected(expected_conditions.alert_is_present())

def base_get_h5_view_text_contain(self, arg, text):
        """
        判断元素中的 text 是否包含指定的 text
        :param arg: 定位元素方式
        :param text: 包含的文案
        :return:
        """
        return self.base_find_element_expected(expected_conditions.text_to_be_present_in_element(arg, text))

def base_get_h5_view_attribute_text_contain(self, arg, text):
        """
        判断某个元素的某个属性是否包含了指定了的 text
        :param arg: 元素定位方式
        :param text: 指定属性的 text
        :return:
        """
        return self.base_find_element_expected(expected_conditions.text_to_be_present_in_element_value(arg, text))


多个 webview页面切换

实现方式:切换窗口 handler

APP 内点击打开多个webview页面时,需要根据切换到指定的页面才能进行操作;如果不切换的话,操作的还是之前的页面。

# 获取所有的webview的handler(窗口句柄)
driver.window_handles
# 获取当前可操作的webview的handler (窗口句柄)
driver.current_handler
# 切换到指定/最新的handle窗口
driver.switch_to.window(driver.window_handles[-1])

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值