Xcode 11 XCUITest Falha ao obter instantâneos correspondentes: Erro ao obter a janela principal kAXErrorServerNotFound


21

Depois de criar meu aplicativo no Xcode 11 e executar meu conjunto de XCUITests, estou recebendo muitas falhas aleatórias com o seguinte.

Falha ao obter instantâneos correspondentes: Erro ao obter a janela principal kAXErrorServerNotFound

Não importa quanto tempo aumente o tempo limite, os problemas aparecerão de forma intermitente. Parece estar tendo problemas ao fazer um snapshot na hierarquia da interface do usuário. Nossos testes passam consistentemente no Xcode 10.

Eu reinstalei o Xcode. Excluídos todos os simuladores. Dados derivados limpos. Tempos limite modificados. Atualizado do Xcode 11.1 para o Xcode 11.2.1.

Obrigado!

 


Mesmo enfrentando o mesmo problema, você conseguiu alguma solução alternativa para o mesmo.
Samarth Kejriwal

Respostas:


9

Tive o problema de fazer a correspondência enquanto executava o UITest simples no Xcode 11.3. Para fazer funcionar, tive que colar primeiro: XCUIApplication().activate()ou XCUIApplication().launch().


Isso funciona .. obrigado
RJ168 13/04

Esta resposta parece ser o caminho a seguir, mas estou tendo problemas para entender o que isso significa? Onde devo digitar XCUIApplication (). Activiate () e / ou XCUIApplication (). Launch ()?
Charlie Seligman

Dentro da sua função de teste da interface do
usuário

0

Eu experimentei o mesmo problema com o Xcode 11 e percebi que o executor do teste não estava sendo morto ao interromper os testes (ou se o teste travou por algum motivo). A execução dos testes pela segunda vez geraria um novo executor de teste e, nesse ponto, eu tinha dois corredores tentando interagir com o mesmo aplicativo, levando a esse erro muito estranho.

Para provar que fiz o seguinte:

  1. Criou um teste de interface do usuário que digita um texto longo em uma exibição de texto
  2. Executou o teste e o interrompeu manualmente quando havia algumas frases na exibição de texto
  3. Abriu o aplicativo manualmente no simulador (não executando o teste)
  4. Observou que caracteres aleatórios estavam aparecendo na exibição de texto, mesmo que nenhum teste estivesse sendo executado.

A solução alternativa foi encerrar e reabrir o simulador para garantir que todos os processos fossem mortos. Espero que isso resolva seus problemas


Obrigado pela compreensão! Agora que você diz isso, está de acordo com o que observei. Infelizmente, como eu disse no meu post original, eu já tentei excluir todos os simuladores. Esses testes são executados como parte de nossas compilações localmente e em nosso sistema de IC. Você conhece alguma maneira de automatizar esse processo?
Luke Street

I O que acabamos fazendo em nosso sistema de IC foi matar explicitamente o Simulador antes de executar um conjunto de testes. Você pode, por exemplo killall "Simulator" 2> /dev/null; xcrun simctl erase all, executar ou, se usar a via rápida, há opções na verificação para redefinir o simulador.
erudel

0

Eu uso máquinas diferentes. Meus Macs mais antigos enfrentam esse erro com muito mais frequência. Meu palpite é que os macs mais antigos não têm a memória necessária para executar certos XCUITests corretamente.


0

De vez em quando, encontro o problema no Xcode 11.1. Observei que o problema ocorre ao aguardar elementos da interface do usuário, especialmente quando há exibição da Web durante o teste. Quando o problema aconteceu, eu estava usando XCUIElement.waitForExistence(timeout:)ou com expectativa NSPredicate(format: "exists == true"). Quando mudei para usar a expectativa com NSPredicate(format: "hittable == true")o problema parece ter desaparecido, mas não sei por quê. A diferença entre os dois atributos é que hittableapenas detectam elementos na tela enquanto existsdetectam elementos fora da tela, como células fora da tela de uma visualização de tabela.

expectation(for: NSPredicate(format: "hittable == true"), evaluateWith: element, handler: nil)
waitForExpectations(timeout: 60, handler: nil)

0

Eu tive um problema semelhante no Xcode 11.

Descobriu-se que antes era permitido ter o mesmo identificador de acessibilidade em muitas páginas.

Mas agora, usando o novo estilo de apresentação modal, você deve usar identificadores diferentes em suas páginas para evitar conflitos.

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.