2017-06-23 87 views
0

我有一個appium(機器人黑盒測試)的問題上,採用WD的NodeJS:Appium + WD(的NodeJS)獲得同級元素

目前我不能得到一個同級元素。 Id的不是唯一的,架構總是相同的 - >

ListView 
    | 
    | 
    Frame 
    | | 
    | | 
    | TextView[@text headline0] 
    | | 
    | | 
    | Button //no text - just an icon 
    | 
    Frame 
    | | 
    | | 
    | TextView[@text headline1] 
    | | 
    | | 
    | Button //no text - just an icon 
    | 
    Frame 
    | | 
    ... 

我的問題是,我想單擊例如旁邊的按鈕。 headline9。我寫了一個scrollToElement(title)功能,只要「標題9」可見即可滾動。

但是現在我不能使用像[//Frame[@index="9"]/]這樣的xpath,因爲它似乎是從當前可見區域中的0重新開始的...所以,也許@index="9"成爲@index=2或有時@index=1 ..

現在是我的主意使用類似選擇按鈕:

.elementByXPath("//android.widget.TextView[@text='headline9']/../android.widget.Button") 

但它似乎不工作(找不到元素)

其他人有沒有想法?

非常感謝!

回答

0

嘗試通過elementsByXPath()獲取所有TextView,然後按照相同的方式獲取所有按鈕。如果TextViews Text等於您的「headline9」,則返回Button,否則遍歷找到的TextView。如果您在可見區域找不到它,請再次滾動並進行掃描。

new Promise(function (resolve, reject) { 
(function yourfunctionId(id, context){ 
    elementsByXPath(Frame[@index=id]TextView){ 
    elementsByXPath(Frame[@index=id]Button){ 
    if(TextView[0] === 'undefined'){ 
    //scroll in ListView 
    //call your function recursively from begin (id =0) 
    yourfunction(0) 
    } 
    if(TextView[0].getAttribute('name') == 'headline9'){ 
    return Button[0] 
    } 
    else{ 
    //next 
    //call your function recursively 
    yourfunction(id++) 
    } 
    } 
    } 
)} 

要麼你滾動的幀的大小幀元素或者你可能必須檢查是第一幀幀部分可見。

0

我希望這有助於元素

var elemList = yield driver.elementsByClassName('android.support.v7.widget.LinearLayoutCompat'); //get List of elements 
for(let elem of elemList) { 
    //traverse list of elements 
    let text = yield elem.elementById('subElementId').text(); //find subElement 
    //Your code logic 
} 

獲取列表,然後找到子元素。我使用的是「yiewd」庫,因爲「wd」的概念是一樣的。 謝謝!