Toast 捕获原理
Toast 识别原理
Toast 定位方法
• getPageSource 是无法找到的
• 必须使用 xpath 查找
• 推荐 //*[@class=‘android.widget.Toast’]
识别
self.driver.find_element(By.XPATH,"//*[@class='android.widget.Toast']")
获取文本
self.driver.find_element(By.XPATH,"//*[@class='android.widget.Toast']").text
一些实践
- 显式等待用expected_conditions.visibility_of_element_located
WebDriverWait(self.driver, 60).until(expected_conditions.visibility_of_element_located(By.XPATH,"//*[@class='android.widget.Toast']"))
没有卵用
toast与其他控件不同,它不是标准意义的控件。 只是为了捕捉它,把它加进入了DOM树。所以不能用这种方式判断toast出现
- 显式等待method内使用find_elements
def load(driver):
print("waitSpecificToast : load")
length = len(self.driver.findElements(By.XPATH,"//*[@class='android.widget.Toast']"))
if length >= 1:
return True
else:
return False
WebDriverWait(self.driver, 60).until(load)
报错,没有卵用
所以,如果是在网络异步的情况下,需要识别出toast文本是否与预期一致. 如下代码可满足
def load(driver):
print("waitSpecificToast : load")
toast_text = self.driver.find_element(By.XPATH,"//*[@class='android.widget.Toast']").text
if toast_text.find('expected_text') != -1:
return True
else:
return False
WebDriverWait(self.driver, 60).until(load)