Tuesday 27 August 2019

Waitforexpectationswithtimeout crash and burn


Reduzimos o suporte a navegadores herdados. O que isso significa para mim Você sempre será capaz de jogar seus jogos favoritos em Kongregate. No entanto, certos recursos do site podem parar de funcionar de repente e deixá-lo com uma experiência gravemente degradada. O que devo fazer Recomendamos vivamente que todos os nossos usuários atualizem para navegadores modernos para uma melhor experiência e maior segurança. Sugerimos que você instale a versão mais recente de um desses navegadores: hellip Trending with Friends g Registre-se ou inicie sessão para começar a receber atualizações de atividades em torno de Kongregate Kongregate é um portal de jogos de navegador orientado por comunidade com uma plataforma aberta para todos os jogos da web. Obtenha seus jogos na frente de milhares de usuários enquanto monetizar através de anúncios e bens virtuais. Saiba mais raquo Visite o nosso site de desenvolvedores raquo Saiba mais sobre nosso programa de publicação - ajudamos os desenvolvedores de jogos a obter seus jogos para milhões de usuários em várias plataformas. Leia nosso blog raquo Nós publicamos novos conteúdos semanalmente, sobre análise de jogos / dados, estudos de caso, soluções de engenharia e insights de design. Acesse a documentação raquo Obtenha tudo o que você precisa saber sobre como implementar nossas APIs e SDKs em seu jogo. Burnin39 Rubber Crash n39 Teste BurnUI no Xcode 7, Parte 1: Testes de interface do usuário Gotchas O que é UI testar UI testing está testando através da interface do usuário. Isso não é nada novo, fazemos isso o tempo todo, manualmente, executando um aplicativo e tocando em sua interface do usuário. Mas testar manualmente regressões é maçante. Você pode se lembrar de testar algumas das funcionalidades que você suspeita que suas últimas mudanças tenham impacto, mas é improvável que você teste a funcionalidade presumivelmente não relacionada. Repetindo os outros testes leva tempo se você ainda se lembrar o que eles eram. Lembrar as coisas e fazê-las para você enquanto você tem um coffeethis é por isso que temos computadores, direito Testes de unidade de automação é relativamente simples: podemos testar uma unidade (classe de leitura) através de sua interface programática, para testá-lo é tão fácil como escrever algum código E certificando-se de que tem o efeito pretendido. Automatizar testes de interface do usuário não é tão simples: você precisa fingir ser alguém tocando e arrastando e beliscando na interface do usuário de aplicativos para ativar as alterações e você precisa ser capaz de olhar para a interface do usuário para ver se ela foi alterada como você esperava. Como o Xcode 7 ajuda A partir do Xcode 7, temos uma interface programática para nossa interface de usuário de aplicativos, graças ao recém-introduzido espaço de nomes XCUI. Antes do Xcode 7, nós tínhamos isso, mas foi exilado para Instrumentos e usado JavaScript. Isso colocá-lo solidamente fora do nosso foco principal no desenvolvimento, que está trabalhando em Xcode (não Instrumentos), escrevendo Swift (não JavaScript). Não bom O antigo sistema de teste da interface do usuário também era iOS, apenas as novas APIs XCUI se aplicam tanto ao iOS quanto ao OS X. Esta nova API fornece uma interface de comprimento de braços aos elementos da interface do usuário de nosso aplicativo em execução. Falando através de proxies, podemos localizar botões e linhas de tabela e interagir com eles muito como um usuário faria. Acessibilidade: A Estrela Secreta A API XCUI permite-nos interagir com a nossa aplicação, tal como o faria um utilizador, mas não necessariamente qualquer utilizador: Vemos a aplicação, não através dos nossos olhos, mas através dos metadados expostos pela infra-estrutura de acessibilidade para impulsionar a interacção do VoiceOver com O sistema iOS. Felizmente, os componentes de interface do usuário fornecidos pelo sistema ajudam a tornar nossos aplicativos acessíveis. Se você está usando apenas componentes UIKit para seus propósitos previstos, você tem pouco de se preocupar. Se você tiver ficado inteligente, teste de interface do usuário pode ser o estímulo que impulsiona você a tornar o seu aplicativo acessível a mais do mundo. Não iriam entrar em detalhes aqui para tornar um aplicativo acessível se você gostaria de saber mais, confira Acessibilidade para iPhone e iPad. UI teste mata dois pássaros com uma pedra: Ele testa que o nosso app funciona, e também testa nosso aplicativo é acessível. Exemplo: Todo. app Permite dar essas idéias gerais forma concreta através de um exemplo trabalhado. Bem estar andando através da adição de testes UI para o oh-tão-único chamado Todo. app. Whats it do Você pode se perguntar o que este aplicativo faz. A resposta curta não é muito, o que normalmente é uma coisa ruim, mas no contexto desta postagem no blog, estavam se concentrando em testes de UI em vez do comportamento de aplicativos. O Todo. app suporta esses recursos: Exibir uma lista de tarefas e datas de vencimento. Marque uma tarefa inacabada como concluída. Marque uma tarefa concluída como inacabada. Ver uma lista de tarefas concluídas e datas de vencimento. Ver uma lista de tarefas a serem entregues hoje. Concretamente, isso significa que temos três visões principais: Todays Tasks Todos (tarefas inacabadas) Dones (tarefas concluídas) Uma vista final permite navegar entre essas vistas. Este primeiro rascunho do aplicativo usa o estilo de interação venerable drill-down table-view. Para alternar uma tarefa entre ser marcado concluído e inacabado, bem usar uma ação de imprensa longa. Bem, indicar que uma tarefa é concluída, exibindo seu título com tachado aplicado, por isso parece tachado, assim como você pode fazer com uma caneta sobre papel. Mantenha seus chapéus, estava indo para UI testar esta jóia UI Testing Todo. app Vá e agarrar-se um clone local deste app sos você pode acompanhar comigo: Observe que você precisará abrir isso no Xcode 7. Esta é a Primeira versão do Xcode para incluir o sistema XCUI bem estar usando. É também a primeira versão a entender Swift 2, que é o que o aplicativo foi escrito dentro Se você receber uma tonelada de erros do compilador ao tentar construir, verifique novamente que você abriu em Xcode 7 e não Xcode 6. (Como Do tempo de escrita, o Xcode 7 Beta 6 era atual.) Gravando seu primeiro teste O Xcode suporta a gravação de testes de interface do usuário ao capturar sua interação com o aplicativo. Ele não vai escrever quaisquer afirmações de teste para você, mas ele irá gravar suas ações como código de teste, momento em que você pode escrever afirmações em torno das interações de aplicativo gravado. Vamos começar por testar que podemos pesquisar até a tabela Due Today e alternar os primeiros itens do estado concluído. Ao longo do caminho, bem verificar que exatamente dois itens mostram como devido hoje. Comece abrindo o arquivo XCUITodoUITests. swift. Coloque o cursor em pouco antes do final da função testExample para que o Xcode escreva o código de teste em um local significativo. Selecione o simulador do iPhone 6 e, em seguida, clique no pequeno ponto vermelho no canto inferior esquerdo do painel do editor, que é o botão Teste de UI de Gravação. Se o botão Gravar UI Test desativado, verifique se está no arquivo XCUITodoUITests. swift. Se você estiver, e ainda estiver desabilitado, tente executar os testes selecionando o item de menu Produto lt Test. Isso funcionou em torno da questão para mim. Uma vez que o simulador está funcionando: Toque na linha Due Today Pressione longamente a primeira linha da tabela Observe como a linha é recarregada para mostrar que o item de tarefa não está mais riscado. Isso significa que o seu agora considerado inacabado: ainda a fazer, ao invés de já feito. Pare a gravação clicando novamente no botão Gravar. O ícone de botões Parar Gravação difere ligeiramente do ícone Iniciar Gravação, mas inclui o mesmo pequeno ícone de ponto vermelho. A gravação está limitada Você verá que o Xcode inseriu uma linha de código para executar a navegação: Na verdade, uma parte dela aparece dentro de um token clicável, semelhante aos marcadores de posição que o Xcode usa nos snippets e na conclusão do código. Ao contrário daqueles toques de marcador de posição inerte, quando você clica neste token, um menu aparece para permitir que você selecione uma maneira diferente de gravar a ação gravada: Esta outra versão possui células. no meio. Bem, mantenha-se com o mais curto: Arraste-selecione o texto do token e pressione Retornar no teclado para aceitar a opção selecionada. Infelizmente, o gravador falhou completamente para capturar a nossa interação de longa-imprensa Bem, temos que escrever que nós mesmos. Conceitos de teste de interface do usuário Os testes de interface do usuário de elemento existem fora do aplicativo. Eles interagem com ela no comprimento dos braços, usando elementos proxy. Esses proxies representam os elementos de interface do usuário reais no aplicativo. Seu teste de interface do usuário pode obter um identificador em um XCUIElement com tipo. Button que representa um UIButton. Mas esse XCUIElement expõe apenas determinadas propriedades de seu objeto representado, mas não o rótulo de cor do título, mas não o tipo de botão e ele interage com o proxied através de um APItap limitado ou toque duplo, mas não sendActionsForControlEvents. Elementos ninho em uma árvore e têm várias propriedades, como um rótulo e um valor. Eles obtêm uma referência à raiz da árvore chamando XCUIApplication (). Consultas Você navega na árvore usando consultas. Além das consultas baseadas em nó de árvore que você espera, como quantas crianças você tem, você também pode executar consultas em uma subárvore inteira com base na filtragem por tipo de elemento de UI, identificador de acessibilidade ou NSPredicate. O tipo de elemento UI é representado por uma enumeração, XCUIElementType. Com membros como. StaticText. Não por classes como UILabel lembrar, comprimento de braços Existem acessadores de forma abreviada para tipos comuns que permitem solicitar todas as tabelas ao invés de construir manualmente uma consulta para descendantsMatchingType (.Table). Theres também um gotcha aqui, em que os tipos de elemento não são separados com base na plataforma, assim você encontrará o iOS. Cell snuggled ao lado do OS X. TableRow e. TableColumn. Eventos simulados Ser capaz de inspecionar a árvore de elementos é grande, mas para chegar a qualquer lugar testes de escrita, você precisará picar e prod eles. Xcodes você tem coberto aqui com ações como tap () e doubleTap (). Não há longPress (). Thoughyoull tem que construir que você mesmo usando pressForDuration (:). Executar o teste de interface do usuário O teste não testará nada agora, mas se você executá-lo, você será capaz de assistir o simulador de fogo e até o aplicativo navegar para a página hoje em dia. Execute os testes usando o item de menu Product lt Test ou pressionando o atalho Cmd-U (presumivelmente U para testes de unidade). Youll aviso que ele primeiro executa os testes de lógica, em seguida, inicia os testes de interface do usuário, em seguida, lança o aplicativo. No Report Navigator, você verá uma entrada Test XCUITodo e uma entrada XCUITodo Debug, em vez de apenas uma entrada XCUITodo de teste, como é usual quando executa somente testes de lógica. Teste de interface do usuário mais rápido: Ignorar o alvo de teste de lógica vazia Como não temos testes de lógica, podemos acelerar nossos testes de interface do usuário editando o esquema de teste para executar apenas o alvo de XCUITodoUITests: Navegue até o item de menu Gt Schema gt Edit Scheme. Ou pressione Cmd-lt (thats Cmd-Shift-, em um teclado Qwerty ou Colemak). Selecione a ação Testar no painel esquerdo. Selecione a guia Informações do painel direito. Assegure-se de que, na coluna Test, a caixa de seleção na linha XCUITodoTests não esteja marcada, enquanto a caixa de seleção na linha XCUITodoUITests estiver marcada. Agora, quando você mash Cmd-U, ele irá executar apenas os testes de interface do usuário. (Em um projeto real, eu sinceramente espero que você não tem um vazio teste de lógica de destino. Nessa situação, você pode querer criar um novo esquema e configurar seus dois esquemas para que a ação de teste de um executa apenas os testes de lógica ea ação de teste Do outro é executado apenas os testes de interface do usuário.) Localizando o primeiro item devido hoje Conceitualmente, o primeiro item devido hoje é a primeira célula (zeroth com indexação com base zero) na única tabela que vemos depois de navegar para a tabela Due Today. Então, você acha que isso funcionaria: Use o código gravado para tocar na célula Due Today Obtenha a lista de tabelas da aplicação (só deve haver uma) Obtenha a lista de células das tabelas Obtenha o primeiro elemento dessa lista (isto é Nosso primeiro item de hoje devido) Youd esperam código como este para trabalhar, então: Gotcha: uma condição de corrida Vá em frente e executar isso. Veja-o quebrar e queimar. Acontece que se você simplesmente carregar em linha reta, há uma condição de corrida: A consulta irá encontrar tanto a tabela de navegação de nível superior ea tabela de hoje devido ao mesmo tempo, para que ele irá relatar cinco células em vez de duas. Se você esperar um pouco, as coisas se acalmam, e apenas a tabela estavam realmente olhando será encontrado pela consulta: Weve introduziu um atraso explícito enquanto esperamos para a consulta (self no predicado) para encontrar exatamente um (self. count 1) tabela. Graças a este atraso, podemos agora escolher a primeira célula Due Today usando a consulta que nós pensamos que deveria funcionar em primeiro lugar. É surpreendente que tenhamos que fazer isso. Seu tudo demasiado fácil para que uma máquina corra antes de uma UI pretendida para seres humanos, especialmente com o uso crescente das animações da transição. O sistema XCUI é projetado para lidar com isso, introduzindo automaticamente uma espera para o aplicativo para ocioso passo após cada interação. Na maioria das vezes, essa etapa de espera para ocioso é suficiente para garantir que o aplicativo esteja em um estado consistente antes de continuar. Por qualquer razão, falhou neste caso. Felizmente, XCUI nos dá as ferramentas que precisamos para contornar o problema. Gotcha: Visualizar as etapas de teste Você pode exibir o relatório de teste abrindo o Report Navigator, selecionando uma linha Test XCUITodo e clicando na guia Testes. Se você expandir um teste de interface do usuário, o Xcode deve fornecer uma lista agradável das ações e consultas da interface do usuário em execução em seu nome no relatório de teste. Para mim, isso funcionou bem quando meu teste estava passando. Se ele falhou, no entanto, eu vi apenas a primeira linha, Start Test () para ver todos os testes, eu tive que virar para a guia Logs e expandir as mensagens de log para o teste de falha. É a mesma informação, mas com uma apresentação não tão bonita, e ao custo de mais alguns cliques. Gotcha: O rótulo é Plaintext O aplicativo usa tachado no texto do rótulo da célula para indicar quando a tarefa está concluída. Podemos ler este rótulo muito facilmente: Note o tipo lá, porém: String. Wed precisa de um NSAttributedString para ser capaz de puxar a informação tachado. Uh-oh Isso significa que não podemos realmente verificar se o estado acabado alterna em long-press sem algumas alterações ao nosso código de aplicativo. Tornando o Estado Acabado Acessível No lado positivo, os testes de interface do usuário através desta API obrigaram-nos a perceber que nossa UI atual não está expondo o estado de tarefa concluída à camada de acessibilidade. Alguém que confia no VoiceOver não seria capaz de dizer qual das suas tarefas de Today Today foram concluídas e que werent Felizmente, isso é fácil de contornar. Aproveitamos a propriedade accessibilityLabel das células textLabel. Essa propriedade nos permite fornecer um rótulo especificamente para o sistema de acessibilidade (e nossos testes de interface do usuário) para serem lidos. Bem, tornar o estado acabado acessível por prefixo itens terminados com feito:. Gotcha: Compartilhamento de código entre App e UI Testes E se mudarmos de idéia mais tarde, embora Seria ótimo para ser capaz de reutilizar o mesmo código que usamos para prefixar o to-do título quando verificamos se o to-do é terminado de Nosso teste de IU. Como os testes de interface do usuário são um módulo totalmente separado do aplicativo e não são executados dentro do aplicativo, como os testes de lógica são, a única maneira de compartilhar código é compilar em todos os arquivos de aplicativo que precisamos compartilhar entre os dois. Se adicionarmos TodoCellView. swift ao alvo de teste da interface do usuário, também precisamos puxar Todo. swift porque a visualização de célula usa essa classe, mesmo que o código de teste não precise acessar as classes de modelo interno dos aplicativos. Isso é porque ele não pode acessá-los, apenas a interface do usuário. Para contornar isso, coloque o código compartilhado em um novo arquivo, Accessibility. swift: Então o nosso TodoCellView pode crescer um método para formatar o rótulo de acessibilidade: e use esse método de seu método configure (. AfterToggling :): Agora nosso teste de interface do usuário Código pode testar se um todo é terminado verificando o texto da etiqueta com este ajudante: Pressão longa nós podemos navegar à tabela de hoje devido Nós podemos encontrar a primeira pilha devida hoje. Podemos ler que as células to-do título e dizer se o seu acabado. Tudo que nós precisamos fazer para terminar o teste que uma imprensa longa realmente alterna o estado terminado é executar uma imprensa longa. Você pode pensar que thered ser um método longPress () ao lado de tap () no XCUIElement. Mas não há. Talvez seja porque uma imprensa longa pode ser qualquer um dos vários comprimentos verificar UILongPressGestureRecognizer. minimumPressDuration. Independentemente disso, sabemos o que significa imprensa longa no contexto do nosso aplicativo, tão bem simplesmente ensinar XCUIElement como pressionar por longo tempo através de uma extensão: um teste de interface do usuário totalmente funcional no último Agora podemos terminar o nosso teste: Revisão Como diz no estanho em A versão final (se você un-CamelCase o nome do teste e aplicar alguma formatação, isto é), ele testa que pressionar longa alterna o primeiro item de hoje. Acabado. Nós conhecemos alguns pontos ásperos ao longo do caminho, mas no curso de depuração deles, temos a vantagem de tribunal em casa agora: estavam trabalhando em Swift dentro do Xcode, ao invés de em JavaScript dentro de Instrumentos, como teria sido o caso usando UIAutomation. Usando consultas, elementos e ações, podemos simular interagindo com o nosso aplicativo através da visão estreita da API de acessibilidade. Isso nos permite simultaneamente criar testes de nível de interface do usuário e encontrar falhas de acessibilidade antes que nossos usuários façam. Jeremy ShermanBurnin Rubber: Crash n Burn Para jogar os jogos super legal em jogos, você precisa de um plugin chamado Flash. Chrome, o navegador que você está usando, não terá mais isso. Se você vir este ícone:, no canto superior direito do seu navegador, clique nele. Ele exibirá esta mensagem: Para jogar os jogos, você precisa clicar em Sempre permitir plugins em gamesgames. É seguro, não se preocupe. Para sempre ter um tempo super-awesome em nosso site, também recomendamos fazer essas etapas rápidas: Digite chrome: // plugins na barra de endereços na parte superior e pressione Enter para abrir a seção Plugins do Chrome 1. Encontre o Adobe Flash Player 2. Verifique o status: Ativar / Desativar. Se ele diz Habilitar clique nele, para permitir que ele seja executado. 3. Você também deve assinalar a caixa ao lado de Sempre permitido para executar 4. Feche a janela do plugin e desfrute de todos os nossos fantásticos jogos

No comments:

Post a Comment