如果没有更多信息(如配置文件),很难回答,因为可能有几个原因。根据我的经验:不,没有找到元素的特定方式(标准的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/
只是为了帮助你,你可以在这里发布这个问题,以及:https://开头讨论.appium.io/ – nullpointer
谢谢,但我没有,也没有更积极的答案解决我的问题:https://discuss.appium.io/t/element-could-not-be-located-in-protractor-scripts- using-appium/9677/13 – Emna