1)說明:appium使用uiaotomator底層的機制來分析抓取toast,並且把toast放到控件樹裡面,但本身並不屬於控件
2)capability參數設置android工作引擎,具體來說應該是appium要指定這個來驅動android客戶端設備,貌似android目前已有的版本都是這個工作引擎,以後就不知道了
automationName : uiautomator2
3)getPageSource是無法找到的,得用xpath

//*[@class=“class屬性值”]

//*[contain(@text,“text文本)”]

一、在原生中獲取toast文本

from appium import webdriverfrom appium.webdriver.common.mobileby import MobileByclass TestToast:    def setup(self):        caps = {}        caps["platformName"] = 'Android'        caps["deviceName"] = '192.168.111.101:5555'        caps["appPackage"] = 'com.example.android.apis'        caps["appActivity"] = '.view.PopupMenu1'        caps["automationName"] = 'uiautomator2'        caps["noReset"] = 'true'        caps["dontStopAppOnReset"] = 'true'        caps["skipDeviceInitializati"] = 'true'        caps["unicodeKeyboard"] = 'true'        caps["resetKeyboard"] = 'true'        self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", caps)        self.driver.implicitly_wait(10)    def teardown(self):        # self.driver.back()        self.driver.quit()    def test_toast(self):        """        1.打開 API Demos -> Views -> Popup Menu        2.點擊search        3.獲取toast        :return:        """        self.driver.find_element_by_xpath('//*[@text = "Make a Popup!"]').click()        self.driver.find_element_by_id('android:id/title').click()        print(self.driver.page_source)        #複製打印信息中toast的class屬性並打印值        #方法一        # print(self.driver.find_element(MobileBy.XPATH, "//*[@class='android.widget.Toast']").text)        #方法二        print(self.driver.find_element(MobileBy.XPATH, "//*[contains(@text,'Clicked popup')]").text)

二、在H5頁面中獲取toast

方法一,打印當前頁面源碼,assert toast文本在源碼中,即斷言正確。
比如雪球開戶,點擊“A股開戶”—>輸入手機號和驗證碼—>點擊“立即開戶”,若沒有點擊獲取驗證碼而直接開戶就會toast提示“請獲取驗證碼”
代碼:

from appium import webdriverfrom appium.webdriver.common.mobileby import MobileByfrom selenium.webdriver.support import expected_conditionsfrom selenium.webdriver.support.wait import WebDriverWaitclass TestAW:    def setup(self):        caps = {}        caps["platformName"] = 'Android'        caps["deviceName"] = '192.168.111.101:5555'        caps["platformVersion"] = '6.0'        caps["appPackage"] = 'com.xueqiu.android'        caps["automationName"] = 'uiautomator2'        caps["appActivity"] = '.common.MainActivity'        caps["noReset"] = 'true'        caps["dontStopAppOnReset"] = 'true'        caps["skipDeviceInitializati"] = 'true'        caps["unicodeKeyboard"] = 'true'        caps["resetKeyboard"] = 'true'        caps["chromedriverExecutable"] = 'C:\Program Files (x86)\Appium\chromedriver74.exe'        self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", caps)        self.driver.implicitly_wait(10)    def teardown(self):        # self.driver.quit()        self.driver.back()    def test_xueqiu_aw(self):        """        1.打開雪球 APP        2.點擊“交易”        3.點擊“A股開戶”        4.在輸入用戶名和密碼        5.點擊“立即開戶”        6.退出應用        :return:        """        # 2.點擊“交易”        self.driver.find_element(MobileBy.XPATH,'//*[@text="交易"]').click()        A_locator = (MobileBy.XPATH,'//*[@class="trade_home_agu_3ki"]/div[2]/h1')        # 获取当前上下文        print(self.driver.contexts)        self.driver.switch_to.context(self.driver.contexts[1])        WebDriverWait(self.driver ,10).until(expected_conditions.element_to_be_clickable(A_locator))        # 3.點擊“A股開戶”        self.driver.find_element(*A_locator).click()        print(self.driver.window_handles)        # 获取当前打开的窗口        self.driver.switch_to.window(self.driver.window_handles[-1])        phonenumber_locator = (MobileBy.ID,'phone-number')        WebDriverWait(self.driver,60).until(expected_conditions.element_to_be_clickable(phonenumber_locator))        # 4.在輸入用戶名和密碼,點擊“立即開戶”        self.driver.find_element(*phonenumber_locator).send_keys('18218813163')        self.driver.find_element(MobileBy.ID,'code').send_keys('123456')        self.driver.find_element(MobileBy.XPATH,'/html/body/div/div/div[2]/div/div[2]/h1').click()        # 获取toast文本        print(self.driver.page_source)        assert  "请获取验证码” in self.driver.page_source

方法二:只判断toast可见,返回true。
这里有个问题,就是不知道是操作失败还是成功导致的toast,总之我用原生方法获取不到文本信息只能判断它出现了,H5页面获取toast文本内容以后有空研究下吧。

        # 获取toast文本        while True:            toast_text = self.driver.find_element(By.XPATH,'//*[text()="请先获取验证码"]').is_displayed()             if toast_text:                break        assert  toast_text == True

更多相关文章

  1. 永久改变android 模拟器分区大小
  2. android按钮监听器的四种技术
  3. Android判断当前线程是否是主线程的方法
  4. Android(安卓)HandlerThread类,Bundle的使用
  5. Android(安卓)Native层开发Camera应用的方法
  6. Android使用Google提供的地图实现定位时LocationListener的各个
  7. Android中DatePicker只显示年月的方法
  8. Android之Activity的生命周期和Activity间的跳转和数据传递
  9. Android(安卓)setContentView 实现同一个activity下不同view的切

随机推荐

  1. Android架构组件—LiveData
  2. android虚拟器启动慢的问题
  3. eclipse开发Android必备环境搭建
  4. Android下的单元测试
  5. Android(安卓)图片压缩也即生成缩略图方
  6. Android NDK环境配置与开发
  7. Android自定义控件进阶-打造Android自定
  8. [置顶] Android webview开发中 js与andro
  9. 《宅男的android开发指南》(翻译)--7
  10. Android的Apk签名方案