1. AppiumDriver<MobileElement>和 androidDriver 之間的區別
啟動appium,執行testng測試腳本,腳本啟動配置項如下:
import io.appium.java_client.AppiumDriver;import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.BROWSER_NAME, "");//這句不是必須的
capabilities.setCapability("deviceName","Android Emulator");
capabilities.setCapability("platformVersion", "4.4");
capabilities.setCapability("platformName","Android");
capabilities.setCapability("appPackage", "com.android.calculator2");
capabilities.setCapability("appActivity", ".Calculator");
AppiumDriver driver = new AppiumDriver(new URL(""), cap
2. android用dom解析HTML,關於Element title = (Element)entry.getElementsByTagName("title").item(0);
item() 方法可返回節點列表中處於指定索引號的節點。
我是android了解不多,我是學java的,只能幫你這么多
3. android stuio 中</>和<></>的區別
這是XML語法的規定,一對標簽必須以<element>abc</element>作為起始和結束,中間的abc是標簽的內容。如果標簽的內容很短,不含嵌套標簽,可以直接使用自封閉標簽<element abc/>,效果和上面的<element>abc</element>是一樣的。
4. 為什麼android找不到javax.lang.model.element.element
很明顯導入類的時候寫錯了本來應該是一個org.jsoup.select.Elements但是import的卻是javax.lang.model.util.Elements檢查下看看那個類引用了Elements把javax.lang.model.util.Elements換成org.jsoup.select.Elements
5. android中如何在xml中添加新的item
Eclipse中打開對應的xml,裡面有圖形界面很容易插入想添加的item
而且不需要考慮item的在xml的位置以及element name
6. android調用webservice,服務端方法接收一個org.w3c.dom.Element對象。怎麼傳送這樣一個對像過去
webservice方法裡面傳入這個對象;
通過攔截器傳送;
7. 我寫Android時一個項目里寫了3個mole,編譯後為什麼會生成3個app
組件化的目的是為了業務解耦,每個業務模塊需要不同的功能,例如車輛詳情模塊需要第三方分享,城市定位模塊需要網路地位等。有些特殊功能的初始化需要在 Application 中去做,但是這些功能並非全部業務組件都用到的東西,放到 BaseApplication 不合適。
因此,我想這樣操作:
模塊共有的初始化,放入BaseApplication 中。
模塊自身的特殊功能初始化,放在自己的 Application。
設想是美好的,但實現前需要先思考一個問題:
多 Mole 項目開發的時候,app mole 和 library mole 的 都有不同的自定義 Application ,可以共存並且自動合並嗎?
答案是 No。
為什麼不可以?
首先,自定義 Application 需要聲明在 AndroidManifest.xml 中。其次,每個 Mole 都有該清單文件,但是最終的 APK 文件只能包含一個。因此,在構建應用時,Gradle 構建會將所有清單文件合並到一個封裝到 APK 的清單文件中。
合並的優先順序是:
App Mole > Library Mole
合並的規則:
結合我們的情況,是值 A 合並值 B,會產生沖突錯誤,如下是我的親身試法:
Execution failed for task ':app:processDebugManifest' .
> Manifest merger failed : Attribute application @name value = ( com . baseres . BaseApplication ) from AndroidManifest . xml: 8 : 9 - 51
is also present at [ :carcomponent ] AndroidManifest . xml: 14 : 9 - 55 value = ( com . carcomponent . CarApplication ) .
Suggestion: add 'tools:replace="android:name"' to < application > element at AndroidManifest . xml: 7 : 5 - 24 : 19 to override .
錯誤信息中給出了解決建議,在高優先順序的 App Mole 中使用 tools:replace="android:name",但這樣做是直接用值 A 替換了值 B,並非我們想要的結果。
8. java10匹配什麼版本appium
一個腳本需要講清楚測試環境:1、自動化平台方面,測試的平台是什麼(appium或者selendroid,selendroid用於測試低版本的Android系統的app);2、被測試設備方面,被測試設備的平台(Android或者iOS),被測試設備的名字,被測試設備的系統版本;3、被測試應用方面,待測應用是移動web應用(使用移動端瀏覽器)還是原生/混合應用,若不是web應用,那麼是否需要安裝包進行安裝,該應用的package和activity是什麼。
appium是對selenium的擴展,又細分為Android方向的擴展和iOS方向的擴展。例如,WebElement可以操作selenium中的命令;MobileElement是appium中的元素,是WebElement的子類,添加了一些移動端獨有的手勢操作;AndroidElement和iOSElement都是MobileElement的子類,各自添加了一些系統特有的功能。又比如,RemoteWebDriver是selenium中的,AppiumDriver是其子類,添加了一些移動端的功能;AndroidDriver和iOSDriver是AppiumDriver的子類,分別適用於特定的系統。
9. Android 中有哪幾種解析 xml 的類,官方推薦哪種
在Android中提供了三種解析XML的方式:SAX(Simple API XML),DOM(Document Objrect Model),以及Android推薦的Pull解析方式.下面就對三種解析方式一一詳細闡述。
首先介紹SAX解析,SAX是事件驅動型XML解析的一個標准介面不會改變 SAX的工作原理簡單地說就是對文檔進行順序掃描,當掃描到文檔(document)開始與結束、元素(element)開始與結束、文檔(document)結束等地方時通知事件處理函數,由事件處理函數做相應動作,然後繼續同樣的掃描,直至文檔結束
下面介紹DOM解析,DOM,即對象文檔模型,它是將整個XML文檔載入內存(所以效率較低,不推薦使用),每一個節點當做一個對象
下面介紹Pull解析,是Android推薦使用,更適合移動設備,以下代碼講解
public class PulPersonService {
public List<Person> getPersons(InputStream instream) throws Exception {
List<Person> persons = null;
Person person = null;
XmlPullParser parser = Xml.newPullParser();//得到Pull解析器
parser.setInput(instream, "UTF-8");//設置下輸入流的編碼
int eventType = parser.getEventType();//得到第一個事件類型
while (eventType != XmlPullParser.END_DOCUMENT) {//如果事件類型不是文檔結束的話則不斷處理事件
switch (eventType) {
case (XmlPullParser.START_DOCUMENT)://如果是文檔開始事件
persons = new ArrayList<Person>();創建一個person集合
break;
case (XmlPullParser.START_TAG)://如果遇到標簽開始
String tagName = parser.getName();// 獲得解析器當前元素的名稱
if ("person".equals(tagName)) {//如果當前標簽名稱是<person>
person = new Person();//創建一個person
person.setId(new Integer(parser.getAttributeValue(0)));//將元素的屬性值賦值給id
}
if (person != null) {//如果person已經創建完成
if ("name".equals(tagName))//如果當前節點標記是name
person.setName(new String(parser.nextText()));
else if ("age".equals(tagName))//如果當前元素節點標記是age
person.setAge(new Short(parser.nextText()));
}
break;
case (XmlPullParser.END_TAG)://如果遇到標簽結束
if ("person".equals(parser.getName())) {//如果是person標簽結束
persons.add(person);//將創建完成的person加入集合
person = null;//並且置空
}
break;
}
eventType=parser.next();//進入下一個事件處理
}
return persons;
}