2016-04-15 56 views
0

我想在ipad模擬器中使用Appium和量角器自動執行測試,問題是我無法通過xpath元素定位,即使該代碼與Appium生成的代碼相同。 我總是面臨着這樣的問題:使用Appium生成量角器腳本時,有沒有一種特別的方法來定位元素?

No element found using locator : by.xpath("//UIAApplication[1]/UIAWindow[2]/UIAScrollView[1]/UIAScrollView[1]/UIA‌​WebView[1]/UIATextField[1]")) 

是否有用於定位與量角器和Appium元素specefic方法?

+1

只是爲了幫助你,你可以在這裏發佈這個問題,以及:https://開頭討論.appium.io/ – nullpointer

+0

謝謝,但我沒有,也沒有更積極的答案解決我的問題:https://discuss.appium.io/t/element-could-not-be-located-in-protractor-scripts- using-appium/9677/13 – Emna

回答

1

如果沒有更多信息(如配置文件),很難回答,因爲可能有幾個原因。根據我的經驗:不,沒有找到元素的特定方式(標準的Protractor/webDriver方式 - by.ID,by.CSS,by.model等)。更多的信息在這裏:https://github.com/angular/protractor/blob/master/docs/locators.md

(1)顯而易見 - 該元素似乎並不存在於測試執行時(無論是因爲iPad/safari響應,xpath不正確,還是測試可能在應用程序已完全加載)

(2)確保global.browser.ignoreSynchronization = true;位於配置文件的onPrepare塊中(除非應用程序是Angular)。

(3)一般來說,我儘量避免使用xpath。可能有更強大的定位該元素的方法。 ID將永遠是最強的,因爲它們是獨一無二的,接下來我會建議CSS鏈接,比如var myElement = element(by.css('.parent')).element(by.css('.child')).雖然CSS鏈接與xpath非常相似,但它給了一些自由,並且允許您跳轉到定位符而不是顯式聲明單個路徑像xpath這樣的元素的確如此。

一些我喜歡的方式來定位元素:

var el = element(by.id('elementID')); 
var el2 = element(by.css('.elementClass')) 

var el3 = element(by.cssContainingText('div', 'Log In')); 
// returns a div element containing the string 'Log In' 

var el4 = element.all(by.css('span.someClass')).first(); 
// .all returns an array of the specific elements, .first() grabs 
// the first from that list, also .last() and others available 

本文也可能會有所幫助:https://blog.mozilla.org/webqa/2013/09/26/writing-reliable-locators-for-selenium-and-webdriver-tests/

+0

非常感謝您的詳細解答,但是現在的問題是我無法再運行量角器:(一旦瀏覽器(safari)打開,它會在ti關閉我。如果我用量角器使用appium,我需要一個safariDriver嗎? 因爲我現在感到困惑,如果我使硒的地址:'http://0.0.0.0:4723/wd/hub'的appium使用或我將改爲硒地址:'http://127.0.0.1:4444/wd/hub',==>當我改變它時,我得到了連接safariDriver失敗的問題。所以我問你是否有必要? – Emna

相關問題