使用Appium生成量角器脚本时,是否有一种定位元素的特殊方法?

时间:2016-04-15 14:40:58

标签: ios selenium-webdriver protractor appium appium-ios

我想在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定位元素的specefic方法?

1 个答案:

答案 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

这篇文章也许有帮助:https://blog.mozilla.org/webqa/2013/09/26/writing-reliable-locators-for-selenium-and-webdriver-tests/