我想在ipad模拟器中使用Appium和量角器自动化我的测试,问题是我无法通过xpath元素定位,即使该代码与Appium生成的相同。 我总是面临这个问题:
No element found using locator : by.xpath("//UIAApplication[1]/UIAWindow[2]/UIAScrollView[1]/UIAScrollView[1]/UIAWebView[1]/UIATextField[1]"))
是否有使用量角器和Appium定位元素的specefic方法?
答案 0 :(得分: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