网上很多 python/java捕获toast的方法,但ruby的简直没见过。
selendroid客户端是基于selenium,而不一定需要appium,所以很多selenium的方法可以直接使用,想到这点 那就很多方法可以去尝试了。
事实上:TOAST使用selendroid也是没法定位,而是借用 PARTIAL_LINK_TEXT(部分匹配text) 或者LINK_TEXT(全词匹配)
使用wait方法 等待text出现。(此方法使用selendroid才能定位到,appium没法定位,具体原因是uiautomation框架的缺陷问题)
例如:
python下 toast 信息判断。
from appium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
appPATH="E:\APP\app-debug_3.1.3.876.apk"
desired_caps={
'platformVersion':'4.0',
'deviceName':'',
'udid':'a6522c88',
'platformName':'android',
'automationName':'Selendroid',
'app':appPATH,
'appPackage':'com.tenda.router.app',
'appActivity':'.activity.Anew.Splash.SplashActivity',
'newCommandTimeout':3600,
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
element =WebDriverWait(self.driver,10).until(EC.presence_of_element_located((By.PARTIAL_LINK_TEXT,u"保存成功")))
def find_toast(self,message):
try:
element = WebDriverWait(self.driver,10).until(EC.presence_of_element_located((By.PARTIAL_LINK_TEXT,message)))
return True
except:
return False
关键语句就是代码中的黑体部分。
类似的,使用ruby
rv=Selenium::WebDriver::Wait.new({:timeout => 5}).until{$b.find_element(:link_text => '保存成功')}
rv=Selenium::WebDriver::Wait.new({:timeout => 5}).until{$b.find_element(:partial_link_text=> '保存成功')}
其中timeout是wait的超时时间。
rv==err时,定位失败。
rv!=err时,定位成功。
java等其他方法定位也应该是一样,有selenium包就行。