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.