GREYActionBlock для возврата определенного свойства элемента не работает
Я следую примеру Swift под заголовком Есть ли способ вернуть определенный элемент из FAQ, чтобы попытаться получить свойство из элемента.
Я скопировал пример непосредственно из FAQ, но после вызова executeAction textValue все еще имеет свое первоначальное значение. Фактически, независимо от того, что я установил для параметра inout в блоке действия, переменная сохраняет свое первоначальное значение после возврата действия.
Что мне не хватает? Вот код, который у меня есть:
func grey_getText(inout text: String) -> GREYActionBlock {
return GREYActionBlock.actionWithName("get text",
constraints: grey_respondsToSelector(Selector("text")),
performBlock: { element, errorOrNil -> Bool in
text = element.text
print("in block: \(text)")
return true
})
}
и в методе испытаний:
var textValue = ""
let domainField = EarlGrey().selectElementWithMatcher(grey_text("Floor One"))
domainField.assertWithMatcher(grey_sufficientlyVisible())
domainField.performAction(grey_getText(&textValue))
print("outside block: \(textValue)")
печать
in block: Floor One
outside block:
Я использую XCode версии 7.3.1
2 ответа
Извлеките код в этом запросе на получение правильной реализации grey_getText. https://github.com/google/EarlGrey/pull/139
Команда EarlGrey знает, что документы устарели, и мы работаем над решением.
func incrementer(inout x: Int) -> () -> () {
print("in incrementer \(x)")
func plusOne() {
print("in plusOne before \(x)")
x += 1;
print("in plusOne after \(x)")
}
return plusOne
}
var y = 0;
let f = incrementer(&y)
print("before \(y)")
f();
print("after \(y)")
Хотя мы ожидаем, что y будет 1 в конце выполнения, y останется 0. Вот фактический результат:
in incrementer 0
before 0
in plusOne before 0
in plusOne after 1
after 0
Это связано с тем, что параметр in-out является не " call-by-reference", а " call-by-copy-restore". как указывает PR, указанный в bootstraponline.