0

我想在 ipad 模拟器中使用 Appium 和量角器自动化我的测试,问题是我无法通过 xpath 元素定位,即使该代码与 Appium 生成的代码相同。我总是面临这个问题:

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

是否有使用量角器和 Appium 定位元素的特定方法?

4

1 回答 1

1

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

于 2016-04-16T13:09:47.010 回答