1.当设备收到推送时如何在Appium中自动化,以便它会打开推送通知并读取文本。
我正在使用以下代码来点击带有一些所需文本的通知。你可以使用它并做任何需要的事情(很长时间没有更新代码。有些部分可以更好地重写。但仍然适用于我测试的每部手机):
首先是页面对象:
public class NativeNotificationPage extends Page {
@AndroidFindBy(id= "com.android.systemui:id/notification_panel")
private List<AndroidElement> notificationPanel;
//settings data
@HowToUseLocators(androidAutomation = LocatorGroupStrategy.ALL_POSSIBLE)
@AndroidFindBy(id = "com.android.systemui:id/clear_all_button")
@AndroidFindBy(id = "com.android.systemui:id/dismiss_text")
private List<AndroidElement> clearAllBtn;
//last items
@AndroidFindBy(id = "com.android.systemui:id/latestItems")
private List<AndroidElement> lastItemsContainer;
//events data
@AndroidFindBy(id = "android:id/status_bar_latest_event_content")
private List<AndroidElement> lastItemsContent;
@AndroidFindBy(id = "android:id/title")
private List<AndroidElement> itemTitle;
String itemTitle_Locator_Text = "android:id/title";
@HowToUseLocators(androidAutomation = LocatorGroupStrategy.ALL_POSSIBLE)
@AndroidFindBy (id = "android:id/big_text")
@AndroidFindBy (id = "android:id/text")
private List<AndroidElement> itemText;
String itemText_Phone_Locator_Text = "android:id/text";
String itemText_Tablet_Locator_Text = "android:id/big_text";
@AndroidFindBy(id = "android:id/time")
private List<AndroidElement> itemTime;
public NativeNotificationPage(WebDriver driver) {
super(driver);
}
public boolean isNativeNotificationPage() {
System.out.println(" check 'Notification' Screen loaded");
boolean bool;
setFastLookTiming();
bool = !notificationPanel.isEmpty();
setDefaultTiming();
return bool;
}
public boolean isNativeNotificationPage(int sec) {
System.out.println(" check 'Notification' Screen loaded");
boolean bool;
setLookTiming(sec);
bool = !notificationPanel.isEmpty();
setDefaultTiming();
return bool;
}
public boolean isClearAllBtnLoaded() {
System.out.println(" check 'Clear' button loaded");
boolean bool;
setLookTiming(3);
bool = !clearAllBtn.isEmpty();
setDefaultTiming();
return bool;
}
public int getLastItemsContentSize() {return lastItemsContent.size();}
public String getItemTitle(int num) {
try {
return lastItemsContent.get(num).findElement(MobileBy.className("android.widget.TextView")).getText();
} catch (Exception e) {
return null;
}
}
public String getItemText(int num) {
if (isPhone()) {
List<MobileElement> item = lastItemsContent.get(num).findElements(MobileBy.className("android.widget.TextView"));
String tmp = null;
for (int i=1;i<item.size();i++) {
if (tmp == null)
tmp = item.get(i).getText();
else
tmp = tmp + "," +item.get(i).getText();
}
return tmp;
} else {
setLookTiming(3);
if (lastItemsContent.get(num).findElements(MobileBy.id(itemText_Tablet_Locator_Text)).isEmpty()) {
setDefaultTiming();
return lastItemsContent.get(num).findElement(MobileBy.id(itemText_Phone_Locator_Text)).getText();
} else {
setDefaultTiming();
return lastItemsContent.get(num).findElement(MobileBy.id(itemText_Tablet_Locator_Text)).getText();
}
}
}
public boolean tapClearAllBtn() {
System.out.println(" tap 'Clear' button");
return tapElementInList_Android(clearAllBtn, 0);
}
public boolean tapNotificationByNum(int num) {
return tapElementInList_Android(lastItemsContent, num);
}
}
现在在测试代码中:
public Boolean tapNotificationByTitleAndText_Android(String neededTitle, String neededText, AppiumDriver driver) {
((AndroidDriver) driver).openNotifications();
sleep(1);
nativeNotificationPage = new NativeNotificationPage(driver);
assertTrue("Native notification page is NOT loaded", nativeNotificationPage.isNativeNotificationPage());
int itemsListSize = nativeNotificationPage.getLastItemsContentSize();
System.out.println(" number of notifications is: " + itemsListSize);
assertTrue("Number of notifications is 0", itemsListSize != 0);
String title, text;
for (int i = 0; i < itemsListSize; i++) {
title = nativeNotificationPage.getItemTitle(i);
text = nativeNotificationPage.getItemText(i);
System.out.println(" notification title is: " + title);
System.out.println(" notification text is: " + text);
.....
return nativeNotificationPage.tapNotificationByNum(i);
}
return false;
}
您可以使用以下内置的 AndroidDriver 的方法打开通知窗格。
driver.openNotifications();
如果你想向下滚动到特定的推送,请使用以下代码 -
WebElement element = driver.findElement(By.name("Element Name"));
HashMap<String, String> arguments = new HashMap<String, String>();
arguments.put("element", element.getId());
(JavascriptExecutor)driver.executeScript("mobile: scrollTo", arguments);
注意 - 驱动程序是 AndroidDriver 类型。如果没有,那么你应该对其进行类型转换。
浏览这个库可以更好地理解函数 - https://github.com/appium/java-client
首先,您使用什么类型的推送通知。
两种类型的推送通知 Firebase 优惠:
1.通知
2.数据负载。
公共类 NativeNotificationPage 扩展 Page { 你能帮我完成这个Page课程吗