Erro de correspondência de evento com registro de data e hora: falha ao encontrar o elemento correspondente


93

Estou tentando gerar um UItest no Xcode. Quando tento deslizar o UIview, obtenho um erro:

Timestamped Event Matching Error: Failed to find matching element

janela de erro

insira a descrição da imagem aqui

Isso também acontece se eu tentar tocar em UIView.


Você pode explicar um pouco mais?
Dieter Meemken,

Tento deslizar ou tocar em UIview que suponho que fazer algo (tem reconizer de gestos), mas quando faço o gesto, esse erro acontece. a única maneira que consegui fazer funcionar é com consultas, mas é muito complicado e tenho certeza de que há outra maneira
shay

Respostas:


47

Você deve verificar se a opção 'Acessibilidade' está habilitada para o objeto UIView do qual está deslizando, por exemplo:

insira a descrição da imagem aqui


1
Ativar a acessibilidade para um WebView fez meus testes falharem ao resolver o texto no WebView. Desativar a acessibilidade para o UIView que hospeda o WebView fez com que os testes fossem bem-sucedidos. Portanto, cuidado.
askielboe

1
Como outro ponto para fazer funcionar para mim, tive que dar um rótulo
Sean Lintern

Achei este post útil para usar fastlanepara tirar screenshots de um tableView. stackoverflow.com/a/39331154/4475605
Adrian

Onde é isso? Como faço para definir isso?
Cory McAboy,

@CoryMcAboy você pode configurá-lo a partir do código para sua visualização personalizada:isAccessibilityElement = true
Gleb Tarasov

14

Normalmente, esse problema é observado quando o elemento pai do elemento que você deseja registrar é definido como isAccessibilityElement = true. Em geral, você precisa ter o elemento pai definido como falso para acessar o elemento filho. Por exemplo: se você tem um UILabel dentro de uma visão, a acessibilidade deve ser definida como falsa para a visão e definida como verdadeira para o UILabel.


1
Isso era exatamente reproduzível. Como você disse, isso não funciona, pois o elemento pai está definido como isAccessibilityElement = true! Depois que mudei de volta para false, funcionou novamente.
pommes

3

No Xcode 9.3, onde isso aparentemente ainda é um problema, o que fiz foi:

  • Saia do Xcode
  • Redefina as configurações do Simulador (Hardware -> Apagar todos os conteúdos e configurações)
  • Saia do simulador
  • Exclua os dados derivados do aplicativo atual
  • Reinicie o Xcode
  • Tente gravar novamente - desta vez funcionou para mim.

Eu forneci o identificador como "skipButton" para um botão e, ao identificar o botão, ele sempre falha, estou identificando o botão como app.buttons ["skipButton '], agradeço sua ajuda
Sujit Baranwal

Essas etapas não funcionaram para mim. Na verdade, widgets que não foram afetados anteriormente pelo problema foram afetados.
Geoff S

por que isso não tem conteúdo?
corvo de

2

Para gravar um novo teste, não acho que haja uma solução ainda. Mas, se você usar uma extensão forçando o tap com um teste que já existe, funciona.

Exemplo de uso:

extension XCUIElement {

    func forceTapElement() {
        if self.hittable {
            self.tap()
        }
        else {
            let coordinate: XCUICoordinate = self.coordinateWithNormalizedOffset(CGVectorMake(0.0, 0.0))
            coordinate.tap()
        }  
    }
}

func testSomethingWithCells() {

   let app = XCUIApplication()
   let cells = app.tables.cells
   sleep(1)
   cells.elementBoundByIndex(0).forceTapElement()
}

Você pode verificar a postagem original aqui:

Teste de IU do Xcode - Falha no teste de IU - Falha ao rolar para visível (por ação AX) ao tocar no campo Pesquisar botão "Cancelar"


elementBoundByIndex 'foi renomeado para' element (boundBy :) ', Ex .: cells.element (boundBy: 0) .tap ()
Sujananth

2

Ocasionalmente, tenho encontrado esse problema. Excluir o diretório do aplicativo de DerivedData parece ajudar.


1

Uma solução que funcionou para mim foi identificar o objeto de forma diferente.
No Xcode 8, consegui usar o seguinte:

XCUIApplication().tables.cells["Camera Roll"].buttons["Camera Roll"].tap()

Com o Xcode 9 obtive o erro mencionado nesta pergunta. Acabou usando o seguinte, que funcionou (embora mais instável do que a opção original)

XCUIApplication().cells.element(boundBy: 1).tap()

@Developer em sua função de teste
Huy-Anh Hoang
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.