2016-04-15 77 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

相关问题