没有更多信息(例如您的配置文件)很难回答,因为这可能有几个原因。以我的经验:不,没有定位元素的特定方式(在标准量角器/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/