Selenium com Python: Guia Completo
Selenium com Python: Guia Completo
Baiju Muthukadan
14 de dezembro de 2022
Machine Translated by Google
Machine Translated by Google
Conteúdo
1 Instalação 3
3 Navegando
3.1 Interagindo com a página . . . . . ..... . . . . . . . . . . . . . . ..... . . . . . . . . . . . 13 .
3.2 Preenchimento de . . . . . . . . . . ..... . . . . . . . . . . . . . . ..... . . . . . . . . . . . .
.
formulários 3.3 Arrastar e soltar .. . . . . . . . ..... . . . . . . . . . . . . . . ..... . . . . . . . . . . . 13
3.4 Movendo-se entre janelas e molduras 3.5 . . . . . . . . . . . . . . . . . ..... . . . . . . . . . . . 14 .
Diálogos pop-up . . . . . . . . . . ..... . . . . . . . . . . . . . . ..... . . . . . . . . . . . 15 .
3.6 Navegação: histórico e localização . . . . . . . . . . . . . . . . . . . . ..... . . . . . . . . . . . 15 .
3.7 Cookies . . . . . . . . . . . . . . ..... . . . . . . . . . . . . . . ..... . . . . . . . . . . . 16 . 16 . 16
4 Localizando
Elementos 4.1 . . . . . . . . . . ..... . . . . . . . . . . . . . . ..... . . . . . . . . . . . 17 .
. . . por
Localizando por Id 4.2 Localizando . . Nome
. . . .. . . .
. . . . . . . . . . . . . . ..... . . . . . . . . . . . 18 .
4.3 Localizando por XPath . . . . . . . . ..... . . . . . . . . . . . . . . ..... . . . . . . . . . . . 18 .
4.4 Localizando Hiperlinks por Texto de Link . . . . . . . . . . . . . . . . . . . ..... . . . . . . . . . . . 19 .
4.5 Localizando Elementos por Nome de Tag . . . . . . . . . . . . . . . . . . . . ..... . . . . . . . . . . . 20 . 20
4.6 Localizando Elementos por Nome de Classe . . . . . . . . . . . . . . . . . . . ..... . . . . . . . . . . . . 21
4.7 Localizando Elementos por Seletores CSS . . . . . . . . . . . . . . . . . ..... . . . . . . . . . . . . 21
5 Esperas
5.1 Esperas Explícitas . . . . . . . . . . ..... . . . . . . . . . . . . . . ..... . . . . . . . . . . . 23 .
5.2 Esperas implícitas . . . . . . . . . . ..... . . . . . . . . . . . . . . ..... . . . . . . . . . . . 23 . 25
eu
Machine Translated by Google
6 Objetos de página 27
6.1 Caso de teste . . . . . . . . . . . . . ..... . . . . . . . . . . . . . . ..... . . . . . . . . . . . . 27
6.2 Classes de objetos de . . . . . . . . ..... . . . . . . . . . . . . . . ..... . . . . . . . . . . . . 28 .
. . .
página 6.3 Elementos de página . . . . . . . ..... . . . . . . . . . . . . . . ..... . . . . . . . . . . . 29
6.4 Localizadores . . . . . . . . . . . . . ..... . . . . . . . . . . . . . . ..... . . . . . . . . . . . . 29
7 API do WebDriver
7.1 Exceções . . . . . . . . .
. . ..... . . . . . . . . . . . . . . . ..... . . . . . . . . . . . 31 .
7.2 Cadeias de Ação . . . . . . .
. . ..... . . . . . . . . . . . . . . . ..... . . . . . . . . . . . . 32
7.3 Alertas ... . . . . . . . . .
. . ..... . . . . . . . . . . . . . . . ..... . . . . . . . . . . . . 41
7.4 Teclas especiais . . . . . . . .
. . ..... . . . . . . . . . . . . . . . ..... . . . . . . . . . . . 44 .
7.5 Localizar elementos por . . . .
. . ..... . . . . . . . . . . . . . . . ..... . . . . . . . . . . . . 45
7.6 Capacidades Desejadas . . . .
. . ..... . . . . . . . . . . . . . . . ..... . . . . . . . . . . . 47 .
7.7 Ações de toque . . . . . . .
. . ..... . . . . . . . . . . . . . . . ..... . . . . . . . . . . . 48 .
7.8 Proxy . . . . . . . . . .
. . .
. ..... . . . . . . . . . . . . . . . ..... . . . . . . . . . . . 48 .
7.9 Utilitários . . . . . . . . . . .
. . ..... . . . . . . . . . . . . . . . ..... . . . . . . . . . . . 48 .
7.10 Serviço . . . . . . . . . . .
. . ..... . . . . . . . . . . . . . . . ..... . . . . . . . . . . . 50 .
7.11 Cache de aplicativos . . . . .
. . ..... . . . . . . . . . . . . . . . ..... . . . . . . . . . . . 51 .
7.12 Firefox WebDriver . . . . .
. . ..... . . . . . . . . . . . . . . . ..... . . . . . . . . . . . 52 .
7.13 Opções do Firefox WebDriver . . . ..... . . . . . . . . . . . . . . ..... . . . . . . . . . . . 53 .
7.14 Perfil do Firefox WebDriver . . . . ..... . . . . . . . . . . . . . . ..... . . . . . . . . . . . 55 .
7.15 Firefox WebDriver Binário . . . . ..... . . . . . . . . . . . . . . ..... . . . . . . . . . . . 56 .
7.16 Conexão da extensão Firefox WebDriver . . . . . . . . . . . . . . . ..... . . . . . . . . . . . 57 .
7.17 Driver da Web do Chrome . . . . . . . . . . . . . . . . . . . . . . . . . . . ..... . . . . . . . . . . . 57 .
7.18 Opções do Chrome WebDriver . . . . . . . . . . . . . . . . . . . . . . ..... . . . . . . . . . . . 58 .
7.19 Serviço Chrome WebDriver . . . ..... . . . . . . . . . . . . . . ..... . . . . . . . . . . . 59 .
7.20 Driver Web Remoto . . . . . . . . ..... . . . . . . . . . . . . . . ..... . . . . . . . . . . . 59 .
7.21 WebElement do WebDriver Remoto . . . . . . . . . . . . . . . . . . . . ..... . . . . . . . . . . . 59 .
7.22 Comando WebDriver Remoto . . ..... . . . . . . . . . . . . . . ..... . . . . . . . . . . . . 68
7.23 Manipulador de erros do WebDriver remoto . . . . . . . . . . . . . . . . . . . ..... . . . . . . . . . . . . 72
. . . . .....
7.24 WebDriver remoto Mobile 7.25 Conexão . . . . . . . . . . . . . . ..... . . . . . . . . . . . 74 .
remota do WebDriver remoto . . . . . . . . . . . . . . . . ..... . . . . . . . . . . . 75 .
7.26 Utilitários do WebDriver Remoto . . . . . . . . . . . . . . . . . . . . . . . . ..... . . . . . . . . . . . . 76
7.27 Driver da Web do Internet Explorer . . . . . . . . . . . . . . . . . . . . . . ..... . . . . . . . . . . . 77 .
7.28 Driver da Web do Android . . . . . . . . . . . . . . . . . . . . . . . . . . ..... . . . . . . . . . . . 78 .
7.29 Opera WebDriver . . . . . . . . . ..... . . . . . . . . . . . . . . ..... . . . . . . . . . . . 79 .
7.30 PhantomJS WebDriver . . . . . . ..... . . . . . . . . . . . . . . ..... . . . . . . . . . . . 79 .
7.31 Serviço PhantomJS WebDriver . . ..... . . . . . . . . . . . . . . ..... . . . . . . . . . . . 79 .
7.32 Safari WebDriver . . . . . . . . . ..... . . . . . . . . . . . . . . ..... . . . . . . . . . . . 79 .
7.33 Serviço Safari WebDriver . . . . ..... . . . . . . . . . . . . . . ..... . . . . . . . . . . . 79 .
7.34 Selecione Suporte . . . . . . . . . . ..... . . . . . . . . . . . . . . ..... . . . . . . . . . . . 80 .
7.35 Suporte de espera . . . . . . . . . . . ..... . . . . . . . . . . . . . . ..... . . . . . . . . . . . 80 .
7.36 Suporte de cores . . . . . . . . . . ..... . . . . . . . . . . . . . . ..... . . . . . . . . . . . 82 .
7.37 Suporte para WebDriver de Disparo de Eventos . . .... . . . . . . . . . . . . . . ..... . . . . . . . . . . . 83 .
7.38 Suporte a ouvinte de eventos abstratos . . . ... . . . . . . . . . . . . . . ..... . . . . . . . . . . . 83 .
7.39 Condições esperadas Suporte . . . . . ... . . . . . . . . . . . . . . ..... . . . . . . . . . . . 85 . 85
ii
Machine Translated by Google
9 índices e tabelas 93
Índice 97
iii
Machine Translated by Google
4
Machine Translated by Google
Licença Este documento está licenciado sob Creative Commons Attribution-ShareAlike 4.0 International
Licença.
Nota: Esta não é uma documentação oficial. Se quiser contribuir com esta documentação, você pode bifurcar este projeto no GitHub e enviar
solicitações pull. Você também pode enviar seus comentários para o meu e-mail: [Link] AT gmail DOT com. Até agora, mais de 50
membros da comunidade contribuíram para este projeto (veja as solicitações fechadas). Encorajo os colaboradores a adicionar mais seções e
torná-la uma documentação incrível! Se você conhece alguma tradução deste documento, envie um PR para atualizar a lista abaixo.
Traduções:
• chinês
• japonês
Conteúdo 1
Machine Translated by Google
2 Conteúdo
Machine Translated by Google
CAPÍTULO 1
Instalação
1.1 Introdução
As ligações do Selenium Python fornecem uma API simples para escrever testes funcionais/de aceitação usando o Selenium WebDriver.
Através da Selenium Python API você pode acessar todas as funcionalidades do Selenium WebDriver de forma intuitiva.
As ligações do Selenium Python fornecem uma API conveniente para acessar Selenium WebDrivers como Firefox, Ie, Chrome, Remote
etc. As versões atuais do Python suportadas são 3.5 e superiores.
Esta documentação explica a API Selenium 2 WebDriver. Selenium 1 / Selenium RC API não é abordado aqui.
Usar pip para instalar o pacote Selenium. Python 3 tem pip disponível na biblioteca padrão. Usando o pip, você pode instalar o Selenium
assim:
Você pode considerar usar virtualenv para criar ambientes Python isolados. Python 3 tem venv que é quase o mesmo que virtualenv.
Você também pode baixar as ligações Python para Selenium na página PyPI para o pacote Selenium. e instale manualmente.
3
Machine Translated by Google
Agora você pode executar seus scripts de teste usando Python. Por exemplo, se você criou um script baseado em Selenium e o salvou em
C:\my_selenium_script.py, você pode executá-lo assim:
C:\Python39\[Link] C:\my_selenium_script.py
Para construir o Selenium Python a partir do código-fonte, clone o repositório oficial. Ele contém o código-fonte para todos os sabores oficiais
do Selenium, como Python, Java, Ruby e outros. O código Python reside no diretório /py. Para construir, você também precisará do Bazel
sistema de construção.
Nota: Atualmente, conforme o Selenium se aproxima da versão 4.0.0, ele requer o Bazel 3.2.0 (instruções de instalação), mesmo que 3.3.0
já esteja disponível.
Para construir um Wheel a partir dos fontes, execute o seguinte comando na raiz do repositório:
bazel //py:selenium-roda
Este comando preparará o código-fonte com alguns arquivos JS pré-processados necessários para alguns módulos do webdriver e construirá
o pacote .whl dentro do diretório ./bazel-bin/py/. Depois, você pode usar o pip para instalá-lo.
1.5 Drivers
O Selenium requer um driver para fazer a interface com o navegador escolhido. Firefox, por exemplo, requer geckodriver, que precisa ser
instalado antes que os exemplos abaixo possam ser executados. Certifique-se de que esteja em seu PATH, por exemplo, coloque-o em /usr/
bin ou /usr/local/bin.
A não observância desta etapa resultará em um erro [Link]: Mensagem: o executável 'geck
odriver' precisa estar em PATH.
Outros navegadores suportados terão seus próprios drivers disponíveis. Seguem links para alguns dos drivers de navegador mais populares.
Para obter mais informações sobre a instalação do driver, consulte a documentação oficial.
Nota: O servidor Selenium só é necessário se você quiser usar o WebDriver remoto. Consulte a seção Usando Selenium com
WebDriver remoto para obter mais detalhes. Se você é iniciante aprendendo Selenium, pode pular esta seção
4 Capítulo 1. Instalação
Machine Translated by Google
O servidor Selenium é um programa Java. Java Runtime Environment (JRE) 1.6 ou versão mais recente é recomendado para executar
o servidor Selenium.
Você pode baixar o servidor Selenium 2.x na página de download do site da Selenium. O nome do arquivo deve ser algo assim:
[Link]. Você sempre pode baixar a versão 2.x mais recente do servidor Selenium.
Se o Java Runtime Environment (JRE) não estiver instalado em seu sistema, você poderá fazer o download do JRE no site da Oracle.
Se você estiver usando um sistema GNU/Linux e tiver acesso root em seu sistema, também poderá usar as instruções do sistema
operacional para instalar o JRE.
Se o comando java estiver disponível no PATH (variável de ambiente), você pode iniciar o servidor Selenium usando este comando:
Substitua [Link] pela versão atual do servidor Selenium que você baixou do site.
Se o JRE estiver instalado como um usuário não raiz e/ou se não estiver disponível no PATH (variável de ambiente), você pode digitar o
caminho relativo ou absoluto para o comando java. Da mesma forma, você pode fornecer um caminho relativo ou absoluto para o arquivo
jar do servidor Selenium. Então, o comando ficará mais ou menos assim:
6 Capítulo 1. Instalação
Machine Translated by Google
CAPÍTULO 2
Começando
elem.send_keys("pycon")
elem.send_keys([Link]) assert
"Nenhum resultado encontrado." não em driver.page_source [Link]()
O script acima pode ser salvo em um arquivo (por exemplo:- python_org_search.py), então pode ser executado assim:
python python_org_search.py
O python que você está executando deve ter o módulo Selenium instalado.
7
Machine Translated by Google
driver = [Link]()
O método [Link] navegará para uma página fornecida pela URL. O WebDriver aguardará até que a página seja totalmente carregada (ou seja, o
evento “onload” foi acionado) antes de retornar o controle ao seu teste ou script. Esteja ciente de que, se sua página usa muito AJAX no carregamento,
o WebDriver pode não saber quando foi totalmente carregado:
[Link]("[Link]
A próxima linha é uma afirmação para confirmar que o título contém a palavra “Python”:
O WebDriver oferece várias maneiras de localizar elementos usando o método find_element. Por exemplo, o elemento de texto de entrada pode ser
localizado por seu atributo name usando o método find_element e usando [Link] como seu primeiro parâmetro.
Uma explicação detalhada sobre como encontrar elementos está disponível no capítulo Localizando Elementos :
Em seguida, estamos enviando chaves, isso é semelhante a inserir chaves usando o teclado. Chaves especiais podem ser enviadas usando a classe
Keys importada de [Link]. Por segurança, primeiro limparemos qualquer texto pré-preenchido no campo de entrada (por
exemplo, "Pesquisar") para que não afete nossos resultados de pesquisa:
[Link]()
elem.send_keys("pycon")
elem.send_keys([Link])
Após o envio da página, você deve obter o resultado, se houver. Para garantir que alguns resultados sejam encontrados, faça uma afirmação:
Finalmente, a janela do navegador é fechada. Você também pode chamar o método quit em vez de close. O método quit sairá do navegador,
enquanto close fechará uma guia, mas se apenas uma guia estiver aberta, por padrão, a maioria dos navegadores fechará completamente.:
[Link]()
Selenium é usado principalmente para escrever casos de teste. O pacote Selenium em si não fornece uma ferramenta/framework de teste.
Você pode escrever casos de teste usando o módulo unittest do Python. As outras opções para uma ferramenta/estrutura são pytest e nariz.
Neste capítulo, usamos unittest como o framework de escolha. Aqui está o exemplo modificado que usa o módulo unittest. Este é um teste para a
funcionalidade de pesquisa do [Link]:
8 Capítulo 2. Introdução
Machine Translated by Google
class PythonOrgSearch([Link]):
def tearDown(self):
[Link]()
Você pode executar o caso de teste acima a partir de um shell como este:
python test_python_org_search.py
.
-------------------------------------------------- --------------------
OK
Observação: para executar o teste acima no IPython ou Jupyter, você deve passar alguns argumentos para a função principal, conforme
mostrado abaixo:
[Link](argv=['first-arg-is-ignored'], exit=False)
A classe de caso de teste é herdada de [Link]. Herdar da classe TestCase é a maneira de dizer ao módulo unittest que este é
um caso de teste:
class PythonOrgSearch([Link]):
O método setUp faz parte da inicialização. Este método será chamado antes de cada função de teste que você escreverá nesta classe de
caso de teste. Aqui você está criando uma instância de um Firefox WebDriver.
Este é o método do caso de teste. O método de caso de teste deve sempre começar com o teste de caracteres. A primeira linha dentro
deste método cria uma referência local ao objeto driver criado no método setUp.
O método [Link] navegará para uma página fornecida pela URL. O WebDriver aguardará até que a página seja totalmente carregada
(ou seja, o evento “onload” foi acionado) antes de retornar o controle ao seu teste ou script. Esteja ciente de que, se sua página usa muito
AJAX no carregamento, o WebDriver pode não saber quando foi totalmente carregado:
[Link]("[Link]
A próxima linha é uma afirmação para confirmar que o título contém a palavra “Python”:
[Link]("Python", [Link])
O WebDriver oferece várias maneiras de localizar elementos usando o método find_element. Por exemplo, o elemento de texto de entrada
pode ser localizado por seu atributo name usando o método find_element. Uma explicação detalhada sobre como encontrar elementos
está disponível no capítulo Localizando Elementos :
Em seguida, estamos enviando chaves, isso é semelhante a inserir chaves usando o teclado. Chaves especiais podem ser enviadas
usando a classe Keys importada de [Link]:
elem.send_keys("pycon")
elem.send_keys([Link])
Após o envio da página, você deve obter o resultado de acordo com a pesquisa, se houver. Para garantir que alguns resultados sejam
encontrados, faça uma afirmação:
O método tearDown será chamado após cada método de teste. Este é um lugar para fazer todas as ações de limpeza. No método atual, a
janela do navegador é fechada. Você também pode chamar o método quit em vez de close. O método quit fechará todo o navegador,
enquanto close fechará uma guia, mas se for a única guia aberta, por padrão, a maioria dos navegadores fechará completamente.:
def tearDown(self):
[Link]()
As linhas finais são algum código clichê para executar o conjunto de testes:
10 Capítulo 2. Introdução
Machine Translated by Google
Ao executar o servidor Selenium, você pode ver uma mensagem como esta:
A linha acima diz que você pode usar este URL para se conectar ao WebDriver remoto. aqui estão alguns exemplos:
driver = [Link](
command_executor='[Link]
options=[Link]()
)
driver = [Link](
command_executor='[Link] options=[Link]()
12 Capítulo 2. Introdução
Machine Translated by Google
CAPÍTULO 3
Navegação
A primeira coisa que você deseja fazer com o WebDriver é navegar até um link. A maneira normal de fazer isso é chamando o método get:
[Link]("[Link]
O WebDriver aguardará até que a página seja totalmente carregada (ou seja, o evento onload foi acionado) antes de retornar o controle ao
seu teste ou script. Esteja ciente de que, se sua página usar muito AJAX no carregamento, o WebDriver pode não saber quando foi
totalmente carregado. Se você precisar garantir que essas páginas sejam totalmente carregadas, poderá usar waits.
Apenas ser capaz de ir a lugares não é muito útil. O que realmente gostaríamos de fazer é interagir com as páginas ou, mais
especificamente, com os elementos HTML de uma página. Primeiro de tudo, precisamos encontrar um. O WebDriver oferece várias
maneiras de localizar elementos. Por exemplo, dado um elemento definido como:
Você também pode procurar um link pelo texto, mas cuidado! O texto deve ser uma correspondência exata! Você também deve ter cuidado
ao usar o XPATH no WebDriver. Se houver mais de um elemento que corresponda à consulta, apenas o primeiro será retornado. Se nada
for encontrado, uma NoSuchElementException será lançada.
O WebDriver possui uma API “baseada em objeto”; representamos todos os tipos de elementos usando a mesma interface. Isso significa
que, embora você possa ver muitos métodos possíveis que podem ser invocados ao pressionar a combinação de teclas de preenchimento
automático do IDE, nem todos farão sentido ou serão válidos. Não se preocupe! O WebDriver tentará fazer a coisa certa,
13
Machine Translated by Google
e se você chamar um método que não faz sentido (“setSelected()” em uma tag “meta”, por exemplo) uma exceção será levantada.
Então, você tem um elemento. O que você pode fazer com isso? Primeiro de tudo, você pode querer inserir algum texto em um campo de texto:
element.send_keys("algum texto")
Você pode simular o pressionamento das teclas de seta usando a classe “Keys”:
É possível chamar send_keys em qualquer elemento, o que possibilita testar atalhos de teclado como os usados no GMail. Um efeito colateral disso
é que digitar algo em um campo de texto não o limpará automaticamente. Em vez disso, o que você digitar será acrescentado ao que já está lá.
Você pode facilmente limpar o conteúdo de um campo de texto ou textarea com o método clear:
[Link]()
Já vimos como inserir texto em uma área de texto ou campo de texto, mas e os outros elementos? Você pode “alternar” o estado do menu suspenso
e usar “setSelected” para definir algo como uma tag OPTION selecionada. Lidar com tags SELECT não é tão ruim:
Isso localizará o primeiro elemento “SELECT” na página e percorrerá cada uma de suas OPTIONs, imprimindo seus valores e selecionando cada
um por sua vez.
Como você pode ver, esta não é a maneira mais eficiente de lidar com elementos SELECT. As classes de suporte do WebDriver incluem uma
chamada “Select”, que fornece métodos úteis para interagir com eles:
Suponha que em um teste, precisamos da lista de todas as opções selecionadas padrão, a classe Select fornece um método de propriedade que retorna
uma lista:
14 Capítulo 3. Navegando
Machine Translated by Google
opções = [Link]ções
Depois de terminar de preencher o formulário, você provavelmente deseja enviá-lo. Uma maneira de fazer isso seria encontrar o botão
“enviar” e clicar nele:
Como alternativa, o WebDriver possui o método de conveniência “enviar” em cada elemento. Se você chamar isso em um elemento
dentro de um formulário, o WebDriver percorrerá o DOM até encontrar o formulário anexo e, em seguida, chamará o submit nele. Se o
elemento não estiver em um formulário, o NoSuchElementException será gerado:
[Link]()
Você pode usar arrastar e soltar, movendo um elemento por uma certa quantidade ou para outro elemento:
É raro um aplicativo da Web moderno não ter nenhum quadro ou ser restrito a uma única janela. O WebDriver suporta a movimentação
entre janelas nomeadas usando o método “switch_to.window”:
driver.switch_to.window("windowName")
Todas as chamadas ao driver agora serão interpretadas como sendo direcionadas para a janela específica. Mas como você sabe o
nome da janela? Dê uma olhada no javascript ou no link que o abriu:
<a href="[Link]" target="windowName"> Clique aqui para abrir uma nova janela</a>
Alternativamente, você pode passar um “manípulo de janela” para o método “switch_to.window()”. Sabendo disso, é possível iterar em
todas as janelas abertas da seguinte forma:
driver.switch_to.frame("frameName")
É possível acessar os subframes separando o caminho com um ponto, e você também pode especificar o frame pelo seu índice.
Aquilo é:
driver.switch_to.frame("[Link]")
iria para o frame chamado “child” do primeiro subframe do frame chamado “frameName”. Todos os quadros são avaliados como se
fossem *de cima*.
Quando terminarmos de trabalhar nos quadros, teremos que voltar ao quadro pai, o que pode ser feito usando:
driver.switch_to.default_content()
O Selenium WebDriver possui suporte integrado para lidar com caixas de diálogo pop-up. Depois de acionar uma ação que abriria um pop-
up, você pode acessar o alerta com o seguinte:
alert = driver.switch_to.alert
Isso retornará o objeto de alerta atualmente aberto. Com este objeto, agora você pode aceitar, descartar, ler seu conteúdo ou até mesmo
digitar em um prompt. Essa interface funciona igualmente bem em alertas, confirmações e prompts. Consulte a documentação da API
para obter mais informações.
Anteriormente, abordamos a navegação para uma página usando o comando “get” ( [Link]("[Link] Como você
viu, o WebDriver tem várias interfaces menores e focadas em tarefas, e a navegação é uma tarefa útil.
Para navegar para uma página, você pode usar o método get:
[Link]("[Link]
[Link]() [Link]()
Esteja ciente de que essa funcionalidade depende inteiramente do driver subjacente. É possível que algo inesperado aconteça quando
você chamar esses métodos se estiver acostumado com o comportamento de um navegador em detrimento de outro.
3.7 Cookies
Antes de passar para a próxima seção do tutorial, você pode estar interessado em entender como usar cookies. Antes de tudo, você
precisa estar no domínio para o qual o cookie será válido:
16 Capítulo 3. Navegando
Machine Translated by Google
CAPÍTULO 4
Localizando Elementos
Existem várias estratégias para localizar elementos em uma página. Você pode usar o mais adequado para o seu caso. O Selenium fornece o
seguinte método para localizar elementos em uma página:
• find_element
• encontrar_elementos
Exemplo de uso:
Os atributos disponíveis para a classe By são usados para localizar elementos em uma página. Estes são os atributos disponíveis para Por classe:
ID = "id"
NOME = "nome"
XPATH = "xcaminho"
LINK_TEXT = "texto do link"
PARTIAL_LINK_TEXT = "texto do link parcial"
TAG_NAME = "nome da etiqueta"
CLASS_NAME = "nome da turma"
CSS_SELECTOR = "seletor de css"
A classe 'By' é usada para especificar qual atributo é usado para localizar elementos em uma página. Estas são as várias maneiras pelas quais os
atributos são usados para localizar elementos em uma página:
find_element([Link], "id")
find_element([Link], "name")
find_element([Link], "xpath")
find_element(By.LINK_TEXT, "link text")
(continua na próxima página)
17
Machine Translated by Google
Se você deseja localizar vários elementos com o mesmo atributo, substitua find_element por find_elements.
Use isso quando você souber o atributo id de um elemento. Com esta estratégia, o primeiro elemento com um atributo id correspondente será
retornado. Se nenhum elemento tiver um atributo id correspondente, uma NoSuchElementException será gerada.
<html>
<body>
<form id="loginForm"> <input
name="username" type="text" /> <input name="password"
type="password" /> <input name="continue" type="submit "
value="Login" />
</form>
</body>
</html>
Use isso quando você souber o atributo de nome de um elemento. Com esta estratégia, o primeiro elemento com um atributo de nome
correspondente será retornado. Se nenhum elemento tiver um atributo de nome correspondente, uma NoSuchElementException será lançada.
<html>
<body>
<form id="loginForm"> <input
name="username" type="text" /> <input name="password"
type="password" /> <input name="continue" type="submit "
value="Login" /> <input name="continue" type="button" value="Clear" /> </form> </
body> </html>
XPath é a linguagem usada para localizar nós em um documento XML. Como o HTML pode ser uma implementação de XML (XHTML), os usuários do
Selenium podem aproveitar essa poderosa linguagem para direcionar elementos em seus aplicativos da web. XPath oferece suporte a métodos simples de
localização por atributos de id ou nome e os estende abrindo todos os tipos de novas possibilidades, como localizar a terceira caixa de seleção na página.
Uma das principais razões para usar o XPath é quando você não tem um atributo id ou name adequado para o elemento que deseja localizar. Você pode
usar XPath para localizar o elemento em termos absolutos (não recomendado) ou relativo a um elemento que tenha um atributo id ou name. Os
localizadores XPath também podem ser usados para especificar elementos por meio de atributos diferentes de id e nome.
Os XPaths absolutos contêm a localização de todos os elementos da raiz (html) e, como resultado, provavelmente falharão com apenas o menor ajuste no
aplicativo. Ao localizar um elemento próximo com um atributo id ou name (idealmente um elemento pai), você pode localizar seu elemento de destino com
base no relacionamento. Isso tem muito menos probabilidade de mudar e pode tornar seus testes mais robustos.
<html>
<body>
<form id="loginForm"> <input
name="username" type="text" /> <input name="password"
type="password" /> <input name="continue" type="submit "
value="Login" /> <input name="continue" type="button" value="Clear" /> </form> </
body> </html>
1. Primeiro elemento de formulário com um elemento filho de entrada com nome definido como nome de usuário
2. Primeiro insira o elemento filho do elemento de formulário com id de atributo definido como loginForm
3. Primeiro elemento de entrada com nome de atributo definido como nome de usuário
1. Entrada com nome de atributo definido para continuar e tipo de atributo definido como botão
2. Quarto elemento filho de entrada do elemento de formulário com ID de atributo definido como loginForm
Esses exemplos cobrem alguns conceitos básicos, mas para aprender mais, as seguintes referências são recomendadas:
Aqui estão alguns complementos muito úteis que podem ajudar a descobrir o XPath de um elemento:
Use isso quando souber o texto do link usado em uma marca de âncora. Com esta estratégia, o primeiro elemento com o texto do link correspondente
ao valor fornecido será retornado. Se nenhum elemento tiver um atributo de texto de link correspondente, uma NoSuchElementException será lançada.
<html>
<body>
<p>Tem certeza de que deseja fazer isso?</p> <a
href="[Link]">Continuar</a> <a
href="[Link]">Cancelar</a> < /corpo> </html>
Use isso quando quiser localizar um elemento pelo nome da marca. Com esta estratégia, será retornado o primeiro elemento com o nome da tag
informado. Se nenhum elemento tiver um nome de tag correspondente, uma NoSuchElementException será gerada.
<html>
<body>
<h1>Bem-vindo</h1>
<p>O conteúdo do site vai aqui.</p> </body>
</html>
Use isso quando quiser localizar um elemento pelo nome da classe. Com essa estratégia, o primeiro elemento com o atributo de nome de
classe correspondente será retornado. Se nenhum elemento tiver um atributo de nome de classe correspondente, uma
NoSuchElementException será lançada.
<html>
<body>
<p class="content"> O conteúdo do site vai aqui.</p> </body> </html>
Use isso quando quiser localizar um elemento usando o seletor CSS sintaxe. Com esta estratégia, o primeiro elemento correspondente ao
seletor CSS fornecido será retornado. Se nenhum elemento corresponder ao seletor CSS fornecido, uma NoSuchElementException será
lançada.
<html>
<body>
<p class="content"> O conteúdo do site vai aqui.</p> </body> </html>
CAPÍTULO 5
espera
Atualmente, a maioria dos aplicativos da web está usando técnicas AJAX. Quando uma página é carregada pelo navegador, os elementos
dessa página podem ser carregados em diferentes intervalos de tempo. Isso dificulta a localização de elementos: se um elemento ainda não
estiver presente no DOM, uma função de localização gerará uma exceção ElementNotVisibleException. Usando esperas, podemos resolver
esse problema. A espera fornece alguma folga entre as ações executadas - principalmente localizar um elemento ou qualquer outra operação
com o elemento.
O Selenium Webdriver fornece dois tipos de espera - implícito e explícito. Uma espera explícita faz com que o WebDriver espere que uma
determinada condição ocorra antes de prosseguir com a execução. Uma espera implícita faz com que o WebDriver pesquise o DOM por um
determinado período de tempo ao tentar localizar um elemento.
Uma espera explícita é um código que você define para aguardar a ocorrência de uma determinada condição antes de prosseguir no código.
O caso extremo disso é [Link](), que define a condição para um período de tempo exato de espera. Existem alguns métodos de
conveniência fornecidos que o ajudam a escrever código que aguardará apenas o tempo necessário. WebDriverWait em combinação com
ExpectedCondition é uma maneira de fazer isso.
EC.presence_of_element_located(([Link], "myDynamicElement"))
) finalmente:
[Link]()
23
Machine Translated by Google
No código acima, o Selenium esperará no máximo 10 segundos para que um elemento que corresponda aos critérios fornecidos seja encontrado.
Se nenhum elemento for encontrado nesse tempo, um TimeoutException será lançado. Por padrão, WebDriverWait chama ExpectedCondition a
cada 500 milissegundos até retornar com sucesso. ExpectedCondition retornará true (Boolean) em caso de sucesso ou não nulo se falhar em
localizar um elemento.
Condições esperadas
Existem algumas condições comuns que são frequentemente usadas ao automatizar os navegadores da web. Abaixo estão os nomes de cada um.
A ligação Selenium Python fornece alguns métodos convenientes portanto, você não precisa codificar uma classe de condição_esperada por conta
própria ou criar seu próprio pacote de utilitários para ela.
• title_is
• título_contém
• presença_do_elemento_localizado
• visibilidade_do_elemento_localizado
• visibilidade_de
• presença_de_todos_elementos_localizados
• text_to_be_present_in_element
• text_to_be_present_in_element_value
• frame_to_be_available_and_switch_to_it
• invisibilidade_do_elemento_localizado
• element_to_be_clickable
• staleness_of
• elemento_a_ser_selecionado
• element_located_to_be_selected
• element_selection_state_to_be
• element_located_selection_state_to_be
• alert_is_present
O módulo Expected_conditions contém um conjunto de condições predefinidas para usar com WebDriverWait.
Você também pode criar condições de espera personalizadas quando nenhum dos métodos de conveniência anteriores atender aos seus requisitos.
Uma condição de espera personalizada pode ser criada usando uma classe com o método __call__ que retorna False quando a condição não
corresponde.
classe element_has_css_class(objeto):
"""Uma expectativa para verificar se um elemento possui uma classe CSS específica.
24 Capítulo 5. Esperas
Machine Translated by Google
elemento de retorno
outro:
retorna falso
# Espera até que um elemento com id='myNewInput' tenha classe 'myCSSClass' wait = WebDriverWait(driver,
10) element = [Link](element_has_css_class(([Link], 'myNewInput'), "myCSSClass"))
Você também pode considerar o uso de polling2 biblioteca que você precisa instalar separadamente.
Uma espera implícita informa ao WebDriver para pesquisar o DOM por um determinado período de tempo ao tentar localizar qualquer elemento
(ou elementos) não imediatamente disponível. A configuração padrão é 0 (zero). Depois de definida, a espera implícita é definida para a vida útil
do objeto WebDriver.
driver = [Link]()
driver.implicitly_wait(10) # segundos [Link]("http://
somedomain/url_that_delays_loading") myDynamicElement =
driver.find_element_by_id("myDynamicElement")
26 Capítulo 5. Esperas
Machine Translated by Google
CAPÍTULO 6
Objetos de página
Este capítulo é um tutorial de introdução ao padrão de design Page Objects. Um objeto de página representa uma área onde o teste interage na interface
com o usuário do aplicativo da web.
• Criação de código reutilizável que pode ser compartilhado em vários casos de teste
• Se a interface do usuário for alterada, a correção precisará ser alterada em apenas um local
Aqui está um caso de teste que procura uma palavra no site [Link] e garante alguns resultados. A seção a seguir apresentará o módulo de página
onde os objetos de página serão definidos.
import unittest da
página de importação do selenium import
webdriver
class PythonOrgSearch([Link]):
"""Uma classe de teste de amostra para mostrar como o objeto de página funciona"""
def test_search_in_python_org(self):
"""Testa o recurso de pesquisa do [Link]. Pesquisa a palavra "pycon" e verifica se alguns resultados são
exibidos. Observe que ele não procura nenhum texto específico na página de resultados da pesquisa. Esse
teste verifica se os resultados não estavam vazios. """
27
Machine Translated by Google
#Carregue a página principal. Nesse caso, a página inicial do [Link]. main_page = [Link]([Link])
def derrubar(self):
[Link]()
O padrão de objeto de página pretende criar um objeto para cada parte de uma página da web. Essa técnica ajuda a criar uma
separação entre o código de teste e o código real que interage com a página da web.
classe SearchTextElement(BasePageElement):
"""Esta classe obtém o texto de pesquisa do localizador especificado"""
classe BasePage(objeto):
"""Classe base para inicializar a página base que será chamada de todas as páginas"""
def is_title_matches(self):
"""Verifica se o texto codificado "Python" aparece no título da página"""
def click_go_button(self):
"""Aciona a pesquisa"""
classe SearchResultsPage(BasePage):
"""Os métodos de ação da página de resultados de pesquisa vêm aqui"""
def is_results_found(self):
# Provavelmente deve procurar por este texto no elemento específico da página #, mas por
enquanto funciona bem, retorne "Nenhum resultado encontrado." não em [Link].page_source
classe BasePageElement(objeto):
"""Classe de página base que é inicializada em cada classe de objeto de página."""
driver = [Link]
WebDriverWait(driver, 100).until( lambda driver:
driver.find_element_by_name([Link]))
driver.find_element_by_name([Link]).clear()
driver.find_element_by_name([Link]).send_keys(value)
driver = [Link]
WebDriverWait(driver, 100).until( lambda driver:
driver.find_element_by_name([Link]))
element = driver.find_element_by_name([Link]) return element.get_attribute("value")
6.4 Localizadores
Uma das práticas é separar as strings do localizador do local onde estão sendo utilizadas. Neste exemplo, os
localizadores da mesma página pertencem à mesma classe.
O [Link] ficará assim:
classe SearchResultsPageLocators(objeto):
"""Uma classe para localizadores de resultados de pesquisa. Todos os localizadores de resultados de pesquisa devem
venha aqui"""
passar
CAPÍTULO 7
API do WebDriver
Nota: Esta não é uma documentação oficial. A documentação oficial da API está disponível aqui.
As definições de API neste capítulo mostram a localização absoluta das classes. No entanto, o estilo de importação recomendado é o
seguinte:
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
As classes de exceção podem ser importadas assim (substitua TheNameOfTheExceptionClass pelo nome de classe real fornecido
abaixo):
31
Machine Translated by Google
Alguns atributos podem ser chamados (ou métodos) e outros não podem ser chamados (propriedades). Todos os atributos que podem ser chamados
terminam com colchetes.
• url_atual
Uso:
driver.current_url
• fechar()
Uso:
[Link]()
7.1 Exceções
exceção [Link](msg:
Opcional[str]
=
Nenhum,
tela:
Opcional[str]
=
Nenhum, pilha
vestígio:
Opcional[Sequência[str]]
=
Nenhum)
Bases: [Link]
O comando Element Click não pôde ser concluído porque o elemento que recebe os eventos está ocultando o elemento que foi
solicitado para ser clicado.
exceção [Link](msg:
Opcional[str]
=
Nenhum,
tela:
Opcional[str]
=
Nenhum, pilha
vestígio:
Opcional[Sequência[str]]
=
Nenhum)
Bases: [Link]
Lançado quando um elemento está presente no DOM, mas as interações com esse elemento atingirão outro elemento devido à
ordem de pintura
= Nenhum,
tela:
Opcional[str]
= Nenhum,
rastreamento
de pilha:
Opcional[Sequência[str]]
= Nenhum)
Bases: [Link]
= Nenhum, pilha
vestígio:
Opcional[Sequência[str]]
= Nenhum)
Bases: [Link]
Lançado quando um elemento está presente no DOM, mas não é visível e, portanto, não pode ser interagido.
Mais comumente encontrado ao tentar clicar ou ler o texto de um elemento que está oculto na visualização.
7.1. Exceções 33
Machine Translated by Google
= Nenhum,
tela:
Opcional[str]
= Nenhum,
pilha
trace:
Opcional[Sequência[str]]
= Nenhum)
Bases: [Link]
Nenhum, Opcional[str]
= Nenhum, pilha
vestígio:
Opcional[Sequência[str]]
= Nenhum)
Bases: [Link]
Lançado quando o suporte IME não está disponível. Essa exceção é lançada para cada chamada de método relacionada a IME se o
suporte a IME não estiver disponível na máquina.
= Nenhum,
tela:
Opcional[str]
= Nenhum,
pilha
trace:
Opcional[Sequência[str]]
= Nenhum)
Bases: [Link]
A navegação fez com que o agente do usuário atingisse um aviso de certificado, que geralmente é o resultado de um certificado TLS
expirado ou inválido.
Nenhum, Opcional[str]
= Nenhum, pilha
vestígio:
Opcional[Sequência[str]]
= Nenhum)
Bases: [Link]
= Nenhum,
tela:
Opcional[str]
= Nenhum,
pilha
trace:
Opcional[Sequência[str]]
= Nenhum)
Bases: [Link]
exceção [Link](msg: Op
cional[str]
=
Nenhum, tela:
Opcional[str] =
Nenhum,
rastreamento
de pilha: Opcional[Sequência[str]]
= Nenhum)
Bases: [Link]
= Nenhum,
tela:
Opcional[str]
= Nenhum,
pilha
trace:
Opcional[Sequência[str]]
= Nenhum)
Bases: [Link]
Lançado quando um comando não pôde ser concluído porque o elemento está em um estado inválido.
Isso pode ser causado pela tentativa de limpar um elemento que não é editável e redefinível.
Nenhum, Opcional[str]
= Nenhum, pilha
vestígio:
Opcional[Sequência[str]]
= Nenhum)
Bases: [Link]
Lançado quando o seletor que é usado para localizar um elemento não retorna um WebElement. Atualmente, isso só
acontece quando o seletor é uma expressão xpath e é sintaticamente inválido (ou seja, não é uma expressão xpath) ou a
expressão não seleciona WebElements (por exemplo, “count(//input)”).
7.1. Exceções 35
Machine Translated by Google
= Nenhum, pilha
vestígio:
Opcional[Sequência[str]]
= Nenhum)
Bases: [Link]
Ocorre se o ID de sessão fornecido não estiver na lista de sessões ativas, o que significa que a sessão não existe ou não está
ativa.
exceção [Link](msg:
Opcional[str]
= Nenhum,
tela:
Opcional[str]
= Nenhum,
pilha
vestígio:
Opcional[Sequência[str]]
= Nenhum)
Bases: [Link]
Opcional[Sequência[str]]
= Nenhum)
Bases: [Link]
exceção [Link](msg:
Opcional[str]
= Nenhum,
tela:
Opcional[str]
= Nenhum,
pilha
vestígio:
Opcional[Sequência[str]]
= Nenhum)
Bases: [Link]
Lançado quando o destino fornecido ao método move() ActionsChains é inválido, ou seja, fora do documento.
Opcional[Sequência[str]]
= Nenhum)
Bases: [Link]
Isso pode ser causado pela chamada de uma operação na classe Alert() quando um alerta ainda não está na tela.
Nenhum, Opcional[str]
= Nenhum, pilha
vestígio:
Opcional[Sequência[str]]
= Nenhum)
Bases: [Link]
Você pode verificar se o atributo existe no navegador específico em que está testando. Alguns navegadores podem ter nomes de
propriedade diferentes para a mesma propriedade. (.innerText do IE8 vs. Firefox .textContent)
Nenhum cookie correspondente ao nome de caminho fornecido foi encontrado entre os cookies associados do documento ativo do
contexto de navegação atual.
• O elemento pode ainda não estar na tela no momento da operação de localização (a página da Web ainda está sendo carregada).
Consulte [Link]() para saber como escrever um wrapper de espera para aguardar a
exibição de um elemento.
7.1. Exceções 37
Machine Translated by Google
= Nenhum, pilha
vestígio:
Opcional[Sequência[str]]
= Nenhum)
Bases: [Link]
Lançado ao tentar acessar a raiz de sombra de um elemento quando ele não possui uma raiz de sombra anexada.
Para localizar o conjunto atual de identificadores de janela ativos, você pode obter uma lista dos identificadores de janela ativos da seguinte
maneira:
imprimir driver.window_handles
= Nenhum)
Bases: [Link]
Nenhum, Opcional[str]
= Nenhum, pilha
vestígio:
Opcional[Sequência[str]]
= Nenhum)
Bases: [Link]
= Nenhum, pilha
vestígio:
Opcional[Sequência[str]]
= Nenhum)
Bases: [Link]
exceção [Link](msg:
Opcional[str]
= Nenhum,
tela:
Opcional[str]
= Nenhum,
pilha
vestígio:
Opcional[Sequência[str]]
= Nenhum)
Bases: [Link]
• Você não está mais na mesma página ou a página pode ter sido atualizada desde que o elemento foi localizado.
• O elemento pode ter sido removido e adicionado novamente à tela, desde que foi localizado. Como um elemento sendo
realocado. Isso pode acontecer normalmente com uma estrutura javascript quando os valores são atualizados e o nó é
reconstruído.
• O elemento pode estar dentro de um iframe ou outro contexto que foi atualizado.
=
Nenhum)
Bases: [Link]
= Nenhum, pilha
vestígio:
Opcional[Sequência[str]]
= Nenhum)
Bases: [Link]
7.1. Exceções 39
Machine Translated by Google
exceção [Link](msg:
Opcional[str]
=
Nenhum,
tela:
Opcional[str]
=
Nenhum, pilha
vestígio:
Opcional[Sequência[str]]
=
Nenhum, alert_text:
Opcional[str]
=
Nenhum)
Bases: [Link]
Geralmente gerado quando um modal inesperado está impedindo o webdriver de executar comandos.
= Nenhum, pilha
vestígio:
Opcional[Sequência[str]]
= Nenhum)
Bases: [Link]
Lançado quando uma classe de suporte não obteve um elemento da web esperado.
O comando solicitado corresponde a um URL conhecido, mas não corresponde a nenhum método para esse URL.
Opcional[Sequência[str]]
= Nenhum)
Bases: Exceção
A implementação ActionChains,
Bases: objeto
ActionChains são uma maneira de automatizar interações de baixo nível, como movimentos do mouse, ações do botão do mouse,
pressionamento de tecla e interações do menu de contexto. Isso é útil para realizar ações mais complexas, como passar o mouse e
arrastar e soltar.
Gerar ações do usuário. Quando você chama métodos para ações no objeto ActionChains, as ações são armazenadas em uma fila no
objeto ActionChains. Quando você chama perform(), os eventos são acionados na ordem em que são enfileirados.
ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform()
ações = ActionChains(driver)
actions.move_to_element(menu)
[Link](hidden_submenu)
açõ[Link]()
De qualquer forma, as ações são executadas na ordem em que são chamadas, uma após a outra.
__init__(condutor, duração=250)
Cria um novo ActionChains.
argumentos
click(on_element=Nenhum)
Clica em um elemento.
argumentos
click_and_hold(on_element=Nenhum)
Mantém pressionado o botão esquerdo do mouse em um elemento.
argumentos
• on_element: O elemento para o mouse para baixo. Se Nenhum, clica na posição atual do mouse.
context_click(on_element=Nenhum)
argumentos
• on_element: O elemento para clicar no contexto. Se Nenhum, clica na posição atual do mouse.
double_click(on_element=Nenhum)
Clique duas vezes em um elemento.
argumentos
• on_element: O elemento para clicar duas vezes. Se Nenhum, clica na posição atual do mouse.
drag_and_drop(origem, destino)
Mantém pressionado o botão esquerdo do mouse no elemento de origem, move-se para o elemento de destino e solta
o botão do mouse.
argumentos
Mantém pressionado o botão esquerdo do mouse no elemento de origem, então move para o deslocamento de destino e libera
o botão do mouse.
argumentos
key_down(valor, elemento=Nenhum)
Envia apenas um pressionamento de tecla, sem soltá-la. Deve ser usado apenas com teclas modificadoras (Control, Alt e
Mudança).
argumentos
• value: A tecla modificadora a ser enviada. Os valores são definidos na classe Keys.
• elemento: O elemento para enviar as chaves. Se Nenhum, envia uma chave para o elemento em foco atual.
ActionChains(driver).key_down([Link]).send_keys('c').key_up(Keys.
ÿÿCONTROL).perform()
key_up(valor, elemento=Nenhum)
Libera uma tecla modificadora.
argumentos
• value: A tecla modificadora a ser enviada. Os valores são definidos na classe Keys.
• elemento: O elemento para enviar as chaves. Se Nenhum, envia uma chave para o elemento em foco atual.
ActionChains(driver).key_down([Link]).send_keys('c').key_up(Keys.
ÿÿCONTROL).perform()
move_by_offset(xoffset, yoffset)
Mover o mouse para um deslocamento da posição atual do mouse.
argumentos
• xoffset: deslocamento X para o qual mover, como um número inteiro positivo ou negativo.
move_to_element(to_element)
Mover o mouse para o meio de um elemento.
argumentos
Mova o mouse por um deslocamento do elemento especificado. Os deslocamentos são relativos ao canto superior esquerdo da
elemento.
argumentos
pausa(segundos)
Pausar todas as entradas pela duração especificada em segundos
executar()
Executa todas as ações armazenadas.
release(on_element=None)
Liberar um botão do mouse pressionado em um elemento.
argumentos
• on_element: O elemento para o mouse para cima. Se Nenhum, libera na posição atual do mouse.
reset_actions()
Limpa as ações que já estão armazenadas localmente e na extremidade remota
scroll(x: int, y: int, delta_x: int, delta_y: int, duração: int = 0, origem: str = 'viewport')
Envia informações de rolagem da roda para o navegador para serem processadas.
argumentos
• x: coordenada X inicial
• y: coordenada Y inicial
argumentos
• delta_x: Distância ao longo do eixo X para rolar usando a roda. Um valor negativo rola para a esquerda.
• delta_y: Distância ao longo do eixo Y para rolar usando a roda. Um valor negativo rola para cima.
Rola por quantidade fornecida com base em uma origem fornecida. A origem da rolagem é o centro de um elemento ou a parte
superior esquerda da viewport mais quaisquer deslocamentos. Se a origem for um elemento e o elemento não estiver na viewport, a
parte inferior do elemento será primeiro rolada para a parte inferior da viewport.
argumentos
• origin: Onde a rolagem se origina (viewport ou centro do elemento) mais os deslocamentos fornecidos.
• delta_x: Distância ao longo do eixo X para rolar usando a roda. Um valor negativo rola para a esquerda.
• delta_y: Distância ao longo do eixo Y para rolar usando a roda. Um valor negativo rola para cima.
scroll_to_element(elemento: [Link])
Se o elemento estiver fora da viewport, rola a parte inferior do elemento até a parte inferior da viewport.
argumentos
send_keys(*keys_to_send)
Envia chaves para o elemento focado atual.
argumentos
• keys_to_send: As chaves a serem enviadas. As constantes de teclas modificadoras podem ser encontradas na classe 'Chaves'.
send_keys_to_element(elemento, *keys_to_send)
Envia chaves para um elemento.
argumentos
• keys_to_send: As chaves a serem enviadas. As constantes de teclas modificadoras podem ser encontradas na classe 'Chaves'.
7.3 Alertas
A implementação do Alerta.
classe [Link](driver)
Bases: objeto
Use esta classe para interagir com prompts de alerta. Ele contém métodos para descartar, aceitar, inserir e obter texto de prompts de alerta.
Alert(motorista).accept()
Alert(motorista).dismiss()
__init__(driver)
Cria um novo Alerta.
argumentos
aceitar()
Aceita o alerta disponível.
liberar()
Dispensa o alerta disponível.
send_keys(keysToSend)
Enviar Chaves para o Alerta.
argumentos
texto
Obtém o texto do Alert.
ADICIONAR = '\ue025'
ALT = '\ue00a'
ARROW_DOWN = '\ue015'
ARROW_LEFT = '\ue012'
ARROW_RIGHT = '\ue014'
ARROW_UP = '\ue013'
BACKSPACE = '\ue003'
BACK_SPACE = '\ue003'
CANCELAR = '\ue001'
LIMPAR = '\ue005'
COMANDO = '\ue03d'
CONTROL = '\ue009'
DECIMAL = '\ue028'
APAGAR = '\ue017'
DIVIDIR = '\ue029'
PARA BAIXO = '\ue015'
FIM = '\ue010'
ENTER = '\ue007'
IGUAL = '\ue019'
ESCAPE = '\ue00c'
F1 = '\ue031'
F10 = '\ue03a'
F11 = '\ue03b'
F12 = '\ue03c'
F2 = '\ue032'
F3 = '\ue033'
F4 = '\ue034'
F5 = '\ue035'
F6 = '\ue036'
F7 = '\ue037'
F8 = '\ue038'
F9 = '\ue039'
AJUDA = '\ue002'
HOME = '\ue011'
INSERIR = '\ue016'
ESQUERDA = '\ue012'
LEFT_ALT = '\ue00a'
LEFT_CONTROL = '\ue009'
LEFT_SHIFT = '\ue008'
META = '\ue03d'
MULTIPLICAR = '\ue024'
NULO = '\ue000'
NUMPAD0 = '\ue01a'
NUMPAD1 = '\ue01b'
NUMPAD2 = '\ue01c'
NUMPAD3 = '\ue01d'
NUMPAD4 = '\ue01e'
NUMPAD5 = '\ue01f'
NUMPAD6 = '\ue020'
NUMPAD7 = '\ue021'
NUMPAD8 = '\ue022'
NUMPAD9 = '\ue023'
PAGE_DOWN = '\ue00f'
PAGE_UP = '\ue00e'
PAUSA = '\ue00b'
RETORNAR = '\ue006'
DIREITA = '\ue014'
SEMÍCOLON = '\ue018'
SEPARADOR = '\ue026'
SHIFT = '\ue008'
ESPAÇO = '\ue00d'
SUBTRAIR = '\ue027'
TAB = '\ue004'
ZENKAKU_HANKAKU = '\ue040'
Estes são os atributos que podem ser usados para localizar elementos. Veja o capítulo Localizando Elementos para exemplos de uso.
A implementação Por.
ID = 'id'
NOME = 'nome'
XPATH = 'xpath'
Consulte a seção Usando o Selenium com WebDriver remoto para obter exemplos de uso dos recursos desejados.
classe [Link].desired_capabilities.DesiredCapabilities
Bases: objeto
Use isso como ponto de partida para criar um objeto de recursos desejado para solicitar webdrivers remotos para
conectar ao servidor Selenium ou grade Selenium.
Exemplo de uso:
selenium_grid_url = "[Link]
Nota: Sempre use '.copy()' no objeto DesiredCapabilities para evitar os efeitos colaterais de alterar a instância da
classe Global.
7.8 Procuração
A implementação do Proxy.
classe [Link](raw=None)
Bases: objeto
__init__(raw=Nenhum)
Cria um novo proxy.
argumentos
• raw: dados proxy brutos. Se Nenhum, os valores de classe padrão serão usados.
add_to_capabilities(capacidades)
Adiciona informações de proxy como recurso em recursos especificados.
argumentos
auto_detect Retorna
''
ftpProxy =
ftp_proxy
Retorna a configuração do proxy ftp.
''
httpProxy =
http_proxy
Retorna a configuração do proxy http.
''
noProxy =
no_proxy
Retorna a configuração noproxy.
''
proxyAutoconfigUrl =
proxy_autoconfig_url Retorna a
configuração de url de configuração automática do proxy.
proxy_type
Retorna o tipo de proxy como ProxyType.
meiasSenha = ''
''
meiasProxy =
meiasUsername = ''
meiaVersão = Nenhum
meias_senha Retorna
a configuração de senha do proxy meias.
meias_proxy
Retorna a configuração de proxy meias.
meias_usuário Retorna
a configuração de nome de usuário do proxy meias.
7.8. Proxy 49
Machine Translated by Google
meias_versão Retorna
a configuração da versão do proxy meias.
''
sslProxy =
ssl_proxy
Retorna a configuração do proxy https.
Cada tipo de proxy tem 2 propriedades: 'ff_value' é o valor da preferência de perfil do Firefox, 'string' é o id do tipo de proxy.
classmethod load(valor)
classe [Link]
Bases: objeto
7.9 Utilitários
Os métodos Utils.
Preferimos o IPv4 para não alterar o comportamento das implementações anteriores apenas para IPv4 e porque alguns
drivers (por exemplo, FirefoxDriver) não suportam conexões IPv6.
Se o número da porta opcional for fornecido, apenas os IPs que escutam na porta fornecida serão considerados.
argumentos
Retorna Um único endereço IP, como uma string. Se algum endereço IPv4 for encontrado, um será retornado. Caso contrário,
se algum endereço IPv6 for encontrado, um será retornado. Se nenhum, nenhum será retornado.
[Link].free_port() ÿ int
Determina uma porta livre usando soquetes.
argumentos
[Link].is_url_connectable(port: Union[int, str]) ÿ bool Tenta se conectar ao servidor HTTP no caminho /status
e porta especificada para ver se ele responde com sucesso.
argumentos
[Link].join_host_port(host: str, porta: int) ÿ str Junta um nome de host e uma porta.
Esta é uma implementação mínima destinada a lidar com literais IPv6. Por exemplo, _join_host_port('::1', 80) == '[::1]:80'.
argumentos
7.10 Serviço
class [Link](executable: str, port: int = 0, log_file: Union[int, IO[Any]] = -3, env: Op tional[Mapping[Any,
Any]] = None , start_error_message: Opcional[str]
= Nenhum)
Bases: [Link]
A classe base abstrata para todos os objetos de serviço. Os serviços normalmente iniciam um programa filho em um novo processo como um
processo intermediário para se comunicar com um navegador.
Parâmetros
• port – Porta na qual o serviço será executado, o padrão é 0, onde o sistema operacional decidirá.
• log_file – (Opcional) descritor de arquivo (pos int) ou objeto de arquivo com um descritor de arquivo válido.
[Link] e [Link] também são valores válidos.
• env – (Opcional) Mapeamento de variáveis de ambiente para o novo processo, padrão para
[Link].
__init__(executável: str, port: int = 0, log_file: Union[int, IO[Any]] = -3, env: Op tional[Mapping[Any, Any]] = None, start_error_message:
Optional[str] = None ) ÿ Nenhum
Inicializar auto. Consulte help(type(self)) para obter uma assinatura precisa.
7.10. Serviço 51
Machine Translated by Google
command_line_args() ÿ Lista[str]
Uma lista de argumentos do programa (excluindo o executável).
is_connectable() ÿ bool
Estabelece uma conexão de soquete para determinar se o serviço em execução na porta está acessível.
send_remote_shutdown_command() ÿ Nenhum
Despache uma solicitação HTTP para o endpoint de desligamento do serviço na tentativa de interrompê-lo.
Exceções
• WebDriverException : gerado quando não pode iniciar o serviço ou quando não pode se conectar
ao serviço
stop() ÿ Nenhum
Interrompe o serviço.
service_url
Obtém a url do serviço
A implementação do ApplicationCache.
classe [Link].html5.application_cache.ApplicationCache(driver)
Bases: objeto
__init__(driver)
Cria um novo Cache de Aplicativo.
argumentos
VERIFICAÇÃO = 2
BAIXANDO = 3
IDLE = 1
OBSOLETO = 5
SEM CACHE = 0
UPDATE_READY = 4
status
Retorna um status atual do cache do aplicativo.
serviço=Nenhum,
sired_capabilities=Nenhum,
de
log_path=Nenhum, keep_alive=Verdadeiro)
Bases: [Link]
Com base na combinação e especificidade dos vários argumentos de palavras-chave, será construído um dicionário de recursos
que será passado para a extremidade remota.
Os argumentos de palavra-chave fornecidos a este construtor são auxiliares para permitir mais facilmente que as sessões do
Firefox WebDriver sejam personalizadas com diferentes opções. Eles são mapeados para um dicionário de capacidades que é
passado para a extremidade remota.
Como algumas das opções, como firefox_profile e [Link] são mutuamente exclusivas, a precedência é dada de quão
específica é a configuração. capacidades é o argumento de palavra-chave menos específico, seguido por opções, seguido por
firefox_binary e firefox_profile.
Na prática, isso significa que, se firefox_profile e [Link] estiverem definidos, a instância de perfil selecionada sempre
virá da variável mais específica. Nesse caso, seria firefox_profile. Isso fará com que [Link] seja ignorado porque é
considerado uma configuração menos específica do que o argumento de palavra-chave firefox_profile de nível superior. Da
mesma forma, se você especificou um recurso [“moz:firefoxOptions”][“perfil”]
String Base64, isso seria classificado abaixo de [Link].
Parâmetros
• executável_path – obsoleto: caminho completo para substituir qual binário do geckodriver usar para o Firefox
47.0.1 e superior, cujo padrão é selecionar o binário do caminho do sistema.
• desejado_capabilities – obsoleto: alias de recursos. Em versões futuras desta biblioteca, isso substituirá
'capacidades'. Isso tornará a assinatura consistente com RemoteWebDriver.
contexto(contexto)
Define o contexto em que os comandos do Selenium estão sendo executados usando uma instrução with. O estado do
contexto no servidor é salvo antes de entrar no bloco e restaurado ao sair dele.
Parâmetros context – Context, pode ser uma das propriedades da classe CONTEXT_CHROME ou
CONTEXT_CONTENT.
Exemplo de uso:
get_full_page_screenshot_as_base64() ÿ str
Obtém a captura de tela completa do documento da janela atual como uma string codificada em base64 que é útil
em imagens incorporadas em HTML.
Uso
driver.get_full_page_screenshot_as_base64()
Salva uma captura de tela completa do documento da janela atual em um arquivo de imagem PNG. Retorna False se houver
algum IOError, senão retorna True. Use caminhos completos em seu nome de arquivo.
argumentos
• nome do arquivo: o caminho completo no qual você deseja salvar sua captura de tela. Isso deve terminar com um .png
extensão.
Uso
driver.get_full_page_screenshot_as_file('/Screenshots/[Link]')
Uso
driver.get_full_page_screenshot_as_png()
Retorna o identificador do addon instalado. Esse identificador pode ser usado posteriormente para desinstalar o complemento.
Uso
driver.install_addon('/caminho/para/[Link]')
Salva uma captura de tela completa do documento da janela atual em um arquivo de imagem PNG. Retorna False se houver
algum IOError, senão retorna True. Use caminhos completos em seu nome de arquivo.
argumentos
• nome do arquivo: o caminho completo no qual você deseja salvar sua captura de tela. Isso deve terminar com um .png
extensão.
Uso
driver.save_full_page_screenshot('/Screenshots/[Link]')
set_context(contexto) ÿ Nenhum
desinstalar_addon(identificador) ÿ Nenhum
Desinstala o complemento do Firefox usando seu identificador.
Uso
driver.uninstall_addon('addon@[Link]')
CONTEXT_CHROME = 'cromo'
CONTEXT_CONTENT = 'conteúdo'
firefox_profile
classe [Link]
Bases: objeto
__iniciar__()
Inicializar auto. Consulte help(type(self)) para obter uma assinatura precisa.
to_capabilities() ÿ dict
classe [Link]
Bases: [Link]
__iniciar__()
Inicializar auto. Consulte help(type(self)) para obter uma assinatura precisa.
to_capabilities() ÿ dict
Organiza as opções do Firefox para um objeto moz:firefoxOptions.
KEY = 'moz:firefoxOptions'
binário
Retorna a instância FirefoxBinary
local_binário
default_capabilities
Retorne os recursos mínimos necessários como um dicionário.
sem cabeça
preferências
perfil
classe [Link].firefox_profile.FirefoxProfile(profile_directory=None)
Bases: objeto
__init__(profile_directory=Nenhum)
Inicializa uma nova instância de um perfil do Firefox
argumentos
• profile_directory: Diretório do perfil que você deseja usar. Se um diretório for passado, ele será
clonado e o diretório clonado será usado pelo driver quando instanciado. O padrão é Nenhum e
criará um novo diretório quando o objeto for criado.
add_extension(extension='[Link]')
atualizar_preferências()
ANONYMOUS_PROFILE_NAME = 'WEBDRIVER_ANONYMOUS_PROFILE'
DEFAULT_PREFERENCES = Nenhum
accept_untrusted_certs
assume_untrusted_cert_issuer
codificado
Uma cadeia de caracteres compactada e codificada em base64 do diretório de perfil para uso com o protocolo de conexão WebDriver JSON remoto
caminho
Obtém o diretório do perfil que está sendo usado no momento
porta
Obtém a porta em que o WebDriver está trabalhando
__init__(firefox_path=Nenhum, log_file=Nenhum)
Cria uma nova instância do binário do Firefox.
argumentos
• firefox_path - Caminho para o executável do Firefox. Por padrão, ele será detectado a partir do
locais padrão.
• log_file - Um objeto de arquivo para redirecionar a saída do processo firefox. Pode ser [Link].
Observe que, com execução paralela, a saída não será síncrona. Por padrão, ele será redirecionado
para /dev/null.
add_command_line_options(*args)
matar()
Mate o navegador.
qual(fnome)
Retorna o caminho totalmente qualificado pesquisando o caminho do nome fornecido
NO_FOCUS_LIBRARY_NAME = 'x_ignore_nofocus.so'
exceção [Link].extension_connection.ExtensionConnectionError
Bases: Exceção
limite=30)
Bases: [Link].remote_connection.RemoteConnection
conectar()
Conecta-se à extensão e recupera o ID da sessão.
classmethod connect_and_quit()
Conecta-se a um navegador em execução e sai imediatamente.
classmethod is_connectable ()
Tenta se conectar ao ramal, mas não recupera o contexto.
quit(sessionId=Nenhum)
Bases: [Link]
Controla o ChromeDriver e permite que você conduza o navegador. Você precisará baixar o executável do ChromeDriver em http://
[Link]/[Link]
Cria uma nova instância do driver chrome. Inicia o serviço e cria uma nova instância do driver chrome.
argumentos
• executable_path - Obsoleto: caminho para o executável. Se o padrão for usado, ele assume que o executável
está no $PATH
• port - Obsoleto: porta que você gostaria que o serviço fosse executado, se deixado como 0, uma porta livre será
encontrado.
• service - Objeto de serviço para lidar com o driver do navegador se você precisar passar detalhes extras
• desejado_capabilities - obsoleto: objeto de dicionário apenas com recursos não específicos do navegador,
como “proxy” ou “loggingPref”.
classe [Link]
Bases: [Link]
default_capabilities
Retorne os recursos mínimos necessários como um dicionário.
Bases: [Link]
• port – Porta na qual o serviço será executado, o padrão é 0, onde o sistema operacional decidirá.
• env – (Opcional) Mapeamento de variáveis de ambiente para o novo processo, padrão para
[Link].
A implementação do WebDriver.
classe [Link]
Bases: objeto
Classe base abstrata para todos os subtipos de Webdriver. O ABC permite que implementações personalizadas do Webdriver sejam
registradas para que as verificações do tipo isinstance sejam bem-sucedidas.
= Nenhum)
Bases: [Link]
Controla um navegador enviando comandos para um servidor remoto. Espera-se que este servidor esteja executando o protocolo de
conexão do driver da Web conforme definido em [Link]
Atributos
argumentos
add_cookie(cookie_dict) ÿ Nenhum
Adiciona um cookie à sua sessão atual.
argumentos
• cookie_dict: Um objeto de dicionário, com as chaves necessárias - “nome” e “valor”; chaves opcionais
- “caminho”, “domínio”, “seguro”, “httpOnly”, “expiry”, “sameSite”
Uso: driver.add_cookie({'name' : 'foo', 'value' : 'bar'}) driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : ' /'})
driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/', 'secure':True}) driver.add_cookie({'name': ' foo', 'value':
'bar', 'sameSite': 'Strict'})
add_virtual_authenticator(opções: [Link].virtual_authenticator.VirtualAuthenticatorOptions)
ÿ Nenhum
Adiciona um autenticador virtual com as opções fornecidas.
Uso
[Link]()
bidi_connection()
close() ÿ Nenhum
Fecha a janela atual.
Uso
[Link]()
Uso
driver.delete_all_cookies()
Uso
driver.delete_cookie('meu_cookie')
argumentos
argumentos
Uso
execute_script(script, *args)
Executa JavaScript de forma síncrona na janela/quadro atual.
argumentos
Uso
driver.execute_script('return [Link];')
Exemplo:
argumentos
• args - Argumentos opcionais que são passados para a classe do detector de arquivo durante
instanciação.
Uso
Uso
Uso
[Link]()
fullscreen_window() ÿ Nenhum
Invoca a operação de 'tela cheia' específica do gerenciador de janelas
Uso
motorista.get_cookie('meu_cookie')
get_cookies() ÿ Lista[dict]
Retorna um conjunto de dicionários, correspondentes aos cookies visíveis na sessão atual.
Uso
driver.get_cookies()
get_credentials() ÿ List[[Link].virtual_authenticator.Credential]
Retorna a lista de credenciais de propriedade do autenticador.
get_log(log_type)
Obtém o log para um determinado tipo de log
argumentos
Uso
driver.get_log('navegador')
driver.get_log('driver') driver.get_log('cliente')
driver.get_log('servidor')
get_pinned_scripts() ÿ Lista[str]
get_screenshot_as_base64() ÿ str
Obtém a captura de tela da janela atual como uma string codificada em base64 que é útil em
imagens em HTML.
Uso
driver.get_screenshot_as_base64()
Salva uma captura de tela da janela atual em um arquivo de imagem PNG. Retorna False se houver algum IOError, senão
retorna True. Use caminhos completos em seu nome de arquivo.
argumentos
• nome do arquivo: o caminho completo no qual você deseja salvar sua captura de tela. Isso deve terminar com um .png
extensão.
Uso
driver.get_screenshot_as_file('/Screenshots/[Link]')
Uso
driver.get_screenshot_as_png()
Uso
driver.get_window_position()
get_window_rect() ÿ dict
Obtém as coordenadas x, y da janela, bem como a altura e a largura da janela atual.
Uso
driver.get_window_rect()
Uso
driver.get_window_size()
Define um tempo limite fixo para aguardar implicitamente a localização de um elemento ou a conclusão de um
comando. Este método só precisa ser chamado uma vez por sessão. Para definir o tempo limite para chamadas
para exe cute_async_script, consulte set_script_timeout.
argumentos
Uso
driver.implicitly_wait(30)
maximize_window() ÿ Nenhum
Maximiza a janela atual que o webdriver está usando
minimize_window() ÿ Nenhum
Invoca a operação 'minimizar' específica do gerenciador de janelas
print_page(print_options: Opcional[[Link].print_page_options.PrintOptions]
= Nenhum) ÿ str
Obtém o PDF da página atual. O driver se esforça ao máximo para retornar um PDF com base nos parâmetros
fornecidos.
Uso
[Link]()
Uso
[Link]()
remove_all_credentials() ÿ Nenhum
Remove todas as credenciais do autenticador.
remove_virtual_authenticator() ÿ Nenhum
Remove um autenticador virtual adicionado anteriormente. O autenticador não é mais válido após a remoção, portanto,
nenhum método pode ser chamado.
Salva uma captura de tela da janela atual em um arquivo de imagem PNG. Retorna False se houver algum IOError, senão
retorna True. Use caminhos completos em seu nome de arquivo.
argumentos
• nome do arquivo: o caminho completo no qual você deseja salvar sua captura de tela. Isso deve terminar com um .png
extensão.
Uso
driver.save_screenshot('/Screenshots/[Link]')
Defina o tempo de espera para que o carregamento da página seja concluído antes de lançar um erro.
argumentos
Uso
driver.set_page_load_timeout(30)
Defina a quantidade de tempo que o script deve esperar durante uma chamada execute_async_script antes de lançar
em um erro.
argumentos
Uso
driver.set_script_timeout(30)
argumentos
Uso
driver.set_window_position(0,0)
Uso
driver.set_window_rect(x=10, y=10)
driver.set_window_rect(width=100, height=200) driver.set_window_rect(x=10,
y=10, width=100, height=200)
argumentos
Uso
driver.set_window_size(800.600)
start_client()
Chamado antes de iniciar uma nova sessão. Este método pode ser substituído para definir o comportamento de inicialização personalizado.
argumentos
stop_client()
Chamado após a execução de um comando quit. Este método pode ser substituído para definir o comportamento de desligamento
personalizado.
application_cache
Retorna um objeto ApplicationCache para interagir com o cache do aplicativo do navegador
capacidades
retorna os recursos atuais dos drivers que estão sendo usados.
url_atual
Obtém a URL da página atual.
Uso
driver.current_url
current_window_handle Retorna
o identificador da janela atual.
Uso
driver.current_window_handle
capacidades_desejadas
retorna os recursos atuais desejados dos drivers que estão sendo usados
detector_de_arquivo
log_types
Obtém uma lista dos tipos de log disponíveis. Isso só funciona com navegadores compatíveis com w3c.
Uso
driver.log_types
móvel
nome
Retorna o nome do navegador subjacente para esta instância.
Uso
nome = [Link]
orientação
Obtém a orientação atual do dispositivo
Uso
orientação = [Link]ção
fonte da página
Obtém a origem da página atual.
Uso
driver.page_source
troque para
devoluções
Uso
driver.switch_to.frame(driver.find_elements(By.TAG_NAME, "iframe
ÿÿ")[0])
driver.switch_to.parent_frame()
driver.switch_to.window('main')
limites de tempo
Obtenha todos os tempos limites que foram definidos na sessão atual
Uso
:: [Link]
title
Retorna o título da página atual.
Uso
título = motorista.título
virtual_authenticator_id Retorna o id
do autenticador virtual.
window_handles
Retorna os identificadores de todas as janelas na sessão atual.
Uso
driver.window_handles
[Link].create_matches(opções:
List[[Link]]) ÿ
Dict[KT, VT]
[Link].get_remote_connection(capacidades, mand_executor, keep_alive, com
eu
nore_local_proxy=False)
[Link].import_cdp()
Classe base abstrata para WebElement. O ABC permitirá que tipos personalizados sejam registrados como um WebElement para passar nas
verificações de tipo.
Geralmente, todas as operações interessantes que interagem com um documento serão realizadas por meio dessa interface.
Todas as chamadas de método farão uma verificação de atualização para garantir que a referência do elemento ainda seja válida.
Isso determina essencialmente se o elemento ainda está anexado ao DOM. Se esse teste falhar, uma StaleElementReferenceException
será lançada e todas as chamadas futuras para essa instância falharão.
__init__(pai, id_)
Inicializar auto. Consulte help(type(self)) para obter uma assinatura precisa.
Uso
Uso
Este método primeiro tentará retornar o valor de uma propriedade com o nome fornecido. Se não existir uma propriedade
com esse nome, retorna o valor do atributo com o mesmo nome. Se não houver nenhum atributo com esse nome, None será
retornado.
Valores considerados verdadeiros, ou seja, iguais a “verdadeiro” ou “falso”, são retornados como booleanos. Todos os outros
valores diferentes de None são retornados como strings. Para atributos ou propriedades que não existem, None é retornado.
Para obter o valor exato do atributo ou propriedade, use os métodos get_dom_attribute() ou get_property() respectivamente.
argumentos
Exemplo:
get_dom_attribute(nome) ÿ str
Obtém o atributo fornecido do elemento. Ao contrário de get_attribute(), este método retorna apenas atributos declarados na
marcação HTML do elemento.
argumentos
Uso
text_length = target_element.get_dom_attribute("classe")
argumentos
Uso
text_length = target_element.get_property("text_length")
is_enabled() ÿ bool
Retorna se o elemento está ativado.
is_selected() ÿ bool
Retorna se o elemento está selecionado.
Pode ser usado para verificar se uma caixa de seleção ou botão de opção está selecionado.
Salva uma captura de tela do elemento atual em um arquivo de imagem PNG. Retorna False se houver algum IOError, senão
retorna True. Use caminhos completos em seu nome de arquivo.
argumentos
• nome do arquivo: o caminho completo no qual você deseja salvar sua captura de tela. Isso deve terminar com um .png
extensão.
Uso
[Link]('/Screenshots/[Link]')
send_keys(*valor) ÿ Nenhum
Simula a digitação no elemento.
argumentos
• value - Uma string para digitação ou configuração de campos de formulário. Para definir entradas de arquivo, isso pode ser um
caminho do arquivo local.
Use isso para enviar eventos de chave simples ou para preencher campos de formulário:
enviar()
Envia um formulário.
access_name
Retorna o nível ARIA do webelement atual
aria_role
Retorna a função ARIA do elemento da web atual
eu ia
Isto é principalmente para uso interno. Casos de uso simples, como verificar se 2 webelements se referem ao mesmo
elemento, podem ser feitos usando ==:
se elemento1 == elemento2:
print("Estes 2 são iguais")
location A
localização do elemento na tela renderizável.
location_once_scrolled_into_view
ESTA PROPRIEDADE PODE MUDAR SEM AVISO. Use isso para descobrir onde na tela um
elemento é para que possamos clicar nele. Este método deve fazer com que o elemento seja rolado para exibição.
Retorna a localização do canto superior esquerdo da tela ou None se o elemento não estiver visível.
parent
Referência interna à instância do WebDriver a partir da qual esse elemento foi encontrado.
retificar
Um dicionário com o tamanho e a localização do elemento.
screenshot_as_base64 Obtém a
captura de tela do elemento atual como uma string codificada em base64.
Uso
img_b64 = element.screenshot_as_base64
screenshot_as_png Obtém
a captura de tela do elemento atual como dados binários.
Uso
element_png = element.screenshot_as_png
shadow_root
Retorna uma raiz de sombra do elemento se houver um ou um erro. Só funciona a partir do Chromium 96 em diante.
Versões anteriores de navegadores baseados no Chromium lançarão uma exceção de declaração.
devoluções
• Objeto ShadowRoot ou
tag_name A
propriedade tagName deste elemento.
texto
O texto do elemento.
Embora essas constantes não tenham significado em si mesmas, elas são usadas para organizar comandos por meio de um
serviço que implementa o protocolo de conexão remota do WebDriver:
[Link]
ADD_COOKIE = 'adicionarCookie'
ADD_CREDENTIAL = 'adicionarCredencial'
ADD_VIRTUAL_AUTHENTICATOR = 'addVirtualAuthenticator'
CLEAR_ELEMENT = 'clearElement'
CLICK_ELEMENT = 'clickElement'
FECHAR = 'fechar'
CONTEXT_HANDLES = 'getContextHandles'
CURRENT_CONTEXT_HANDLE = 'getCurrentContextHandle'
DELETE_ALL_COOKIES = 'deleteAllCookies'
DELETE_COOKIE = 'excluirCookie'
DELETE_SESSION = 'deleteSession'
EXECUTE_ASYNC_SCRIPT = 'executeAsyncScript'
FIND_CHILD_ELEMENT = 'findChildElement'
FIND_CHILD_ELEMENTS = 'encontrarElementosFilhos'
FIND_ELEMENT = 'encontrarElemento'
FIND_ELEMENTS = 'encontrarElementos'
FIND_ELEMENTS_FROM_SHADOW_ROOT = 'findElementsFromShadowRoot'
FIND_ELEMENT_FROM_SHADOW_ROOT = 'findElementFromShadowRoot'
FULLSCREEN_WINDOW = 'fullscreenWindow'
GET = 'obter'
GET_ALL_COOKIES = 'getCookies'
GET_AVAILABLE_LOG_TYPES = 'getAvailableLogTypes'
GET_COOKIE = 'getCookie'
GET_CREDENTIALS = 'getCredentials'
GET_CURRENT_URL = 'getCurrentUrl'
GET_ELEMENT_ARIA_LABEL = 'getElementAriaLabel'
GET_ELEMENT_ARIA_ROLE = 'getElementAriaRole'
GET_ELEMENT_ATTRIBUTE = 'getElementAttribute'
GET_ELEMENT_PROPERTY = 'getElementProperty'
GET_ELEMENT_RECT = 'getElementRect'
GET_ELEMENT_TAG_NAME = 'getElementTagName'
GET_ELEMENT_TEXT = 'getElementText'
GET_ELEMENT_VALUE_OF_CSS_PROPERTY = 'getElementValueOfCssProperty'
GET_LOG = 'getLog'
GET_NETWORK_CONNECTION = 'getNetworkConnection'
GET_PAGE_SOURCE = 'getPageSource'
GET_SCREEN_ORIENTATION = 'getScreenOrientation'
GET_SHADOW_ROOT = 'getShadowRoot'
GET_TIMEOUTS = 'getTimeouts'
GET_TITLE = 'getTitle'
GET_WINDOW_RECT = 'getWindowRect'
GO_BACK = 'voltar'
IS_ELEMENT_ENABLED = 'isElementEnabled'
IS_ELEMENT_SELECTED = 'isElementSelected'
MINIMIZE_WINDOW = 'minimizeWindow'
NEW_SESSION = 'novaSessão'
NEW_WINDOW = 'newWindow'
PRINT_PAGE = 'imprimirPágina'
SAIR = 'sair'
ATUALIZAR = 'atualizar'
REMOVE_ALL_CREDENTIALS = 'removeAllCredentials'
REMOVE_CREDENTIAL = 'removeCredential'
REMOVE_VIRTUAL_AUTHENTICATOR = 'removeVirtualAuthenticator'
SEND_KEYS_TO_ELEMENT = 'sendKeysToElement'
SET_NETWORK_CONNECTION = 'setNetworkConnection'
SET_SCREEN_ORIENTATION = 'setScreenOrientation'
SET_TIMEOUTS = 'setTimeouts'
SET_USER_VERIFIED = 'setUserVerified'
SET_WINDOW_RECT = 'setWindowRect'
SWITCH_TO_CONTEXT = 'switchToContext'
SWITCH_TO_FRAME = 'switchToFrame'
SWITCH_TO_PARENT_FRAME = 'switchToParentFrame'
SWITCH_TO_WINDOW = 'switchToWindow'
UPLOAD_FILE = 'uploadArquivo'
W3C_ACCEPT_ALERT = 'w3cAcceptAlert'
W3C_ACTIONS = 'ações'
W3C_CLEAR_ACTIONS = 'clearActionState'
W3C_DISMISS_ALERT = 'w3cDismissAlert'
W3C_EXECUTE_SCRIPT = 'w3cExecuteScript'
W3C_EXECUTE_SCRIPT_ASYNC = 'w3cExecuteScriptAsync'
W3C_GET_ACTIVE_ELEMENT = 'w3cGetActiveElement'
W3C_GET_ALERT_TEXT = 'w3cGetAlertText'
W3C_GET_CURRENT_WINDOW_HANDLE = 'w3cGetCurrentWindowHandle'
W3C_GET_WINDOW_HANDLES = 'w3cGetWindowHandles'
W3C_MAXIMIZE_WINDOW = 'w3cMaximizeWindow'
W3C_SET_ALERT_VALUE = 'w3cSetAlertValue'
classe [Link]
Bases: objeto
argumentos
classe ConnectionType(máscara)
Bases: objeto
__init__(máscara)
Inicializar auto. Consulte help(type(self)) para obter uma assinatura precisa.
modo avião
dados
Wi-fi
__init__(driver)
Inicializar auto. Consulte help(type(self)) para obter uma assinatura precisa.
set_network_connection(rede)
Defina a conexão de rede para o dispositivo remoto.
[Link].set_network_connection([Link].AIRPLANE_MODE)
contexto
retorna o contexto atual (Native ou WebView).
contextos
retorna uma lista de contextos disponíveis
conexão de rede
fechar()
Limpe os recursos quando terminar com o remote_connection
execute(comando, parâmetros)
Envie um comando para o servidor remoto.
Quaisquer substituições de caminho necessárias para a URL mapeada para o comando devem ser incluídas nos parâmetros do
comando.
argumentos
• params - Um dicionário de parâmetros nomeados para enviar com o comando como carga de pagamento JSON.
classmethod get_certificate_bundle_path()
Retorna Caminhos do certificado codificado em .pem para verificar a conexão com o executor do comando
argumentos
classmethod get_timeout()
Retorna o valor do Timeout em segundos para todas as requisições http feitas à Conexão Remota
classmethod reset_timeout()
Redefina o tempo limite da solicitação http para socket._GLOBAL_DEFAULT_TIMEOUT
classmethod set_certificate_bundle_path(path)
Defina o caminho para o pacote de certificados para verificar a conexão com o executor do comando. Também pode ser definido como Nenhum
para desabilitar a validação do certificado.
argumentos
classmethod set_timeout(timeout)
Substituir o tempo limite padrão
argumentos
browser_name = Nenhum
Bases: [Link]
argumentos
• executable_path - Obsoleto: caminho para o executável. Se o padrão for usado, ele assume que o executável está
no $PATH
• port - Obsoleto: porta que você gostaria que o serviço fosse executado, se deixado como 0, uma porta livre será
encontrado.
• timeout - obsoleto: não é mais usado, mantido para compatibilidade com versões anteriores
• log_level - Obsoleto: nível de log que você gostaria que o serviço executasse.
• desejado_capabilities - Obsoleto: alias de recursos; isso fará com que a assinatura con
consistente com RemoteWebDriver.
create_options() ÿ [Link]
Uso
[Link]()
Bases: [Link]
argumentos
• porta - A porta na qual o serviço safaridriver deve escutar novas conexões. Se zero,
uma porta livre será encontrada.
• executable_path - Caminho para um executável de driver de safari personalizado a ser usado. Se ausente, /usr/
bin/safaridriver é usado.
• reuse_service - Se True, não gera uma instância do safaridriver; em vez disso, conecte-se a um já
serviço em execução que foi iniciado externamente.
• desejado_capabilities: objeto de dicionário com recursos desejados (pode ser usado para fornecer
vários interruptores do Safari).
• service - Objeto de serviço para lidar com o driver do navegador se você precisar passar detalhes extras
depurar()
get_permission(permissão)
desistir()
Fecha o navegador e encerra o executável do SafariDriver que é iniciado ao iniciar o SafariDriver
set_permission(permissão, valor)
Uma classe de serviço que é responsável por iniciar e parar o safaridriver Isso é suportado apenas no MAC OSX.
Parâmetros
• port – Porta na qual o serviço será executado, o padrão é 0, onde o sistema operacional decidirá.
• quiet – Suprime driver stdout & stderr, redireciona para [Link] se habilitado.
• env – (Opcional) Mapeamento de variáveis de ambiente para o novo processo, padrão para
[Link].
command_line_args() ÿ Lista[str]
Uma lista de argumentos do programa (excluindo o executável).
service_url
Obtém a url do Serviço SafariDriver
classe [Link](webelement)
Bases: objeto
__init__(webelement) ÿ Nenhum
Construtor. É feita uma verificação de que o elemento fornecido é, de fato, uma tag SELECT. Se não for, uma
UnexpectedTagNameException será lançada.
argumentos
Select(driver.find_element(By.TAG_NAME, “select”)).select_by_index(2)
deselect_all() ÿ Nenhum
Limpa todas as entradas selecionadas. Isso só é válido quando o SELECT suporta várias seleções. lança NotImplementedError
Se o SELECT não suportar múltiplas seleções
desmarcar_por_index(índice)
Desmarque a opção no índice fornecido. Isso é feito examinando o atributo “index” de um elemento, e não apenas contando.
argumentos
desmarcar_por_valor(valor)
Desmarque todas as opções que têm um valor correspondente ao argumento. Ou seja, quando dado “foo” isso desmarcaria uma
opção como:
<option value=”foo”>Barra</option>
argumentos
deselect_by_visible_text(texto)
Desmarque todas as opções que exibem o texto correspondente ao argumento. Ou seja, quando dado “Bar” isso desmarcaria
uma opção como:
<option value=”foo”>Barra</option>
argumentos
select_by_index(índice)
Selecione a opção no índice fornecido. Isso é feito examinando o atributo “index” de um elemento, e não apenas contando.
argumentos
select_by_value(valor)
Selecione todas as opções que tenham um valor correspondente ao argumento. Ou seja, quando dado “foo” isso selecionaria
uma opção como:
<option value=”foo”>Barra</option>
argumentos
select_by_visible_text(texto)
Selecione todas as opções que exibem o texto correspondente ao argumento. Ou seja, quando dado “Bar” isso selecionaria uma
opção como:
<option value=”foo”>Barra</option>
argumentos
all_selected_options
Retorna uma lista de todas as opções selecionadas pertencentes a esta tag selecionada
first_selected_option
A primeira opção selecionada nesta tag de seleção (ou a opção atualmente selecionada em uma seleção normal)
opções
Retorna uma lista de todas as opções pertencentes a esta tag selecionada
argumentos
Exemplo:
Parâmetros
• método – callable(WebDriver)
Parâmetros
• método – callable(WebDriver)
Retorna o resultado da última chamada ao método, ou True se o método gerou um dos ignorados
exceções
Exemplo:
print(Color.from_string('#00ff33').rgba)
print(Color.from_string('rgb(1, 255, 3)').hex)
print(Color.from_string('blue').rgba)
hexadecimal
rgb
rgba
classe [Link].event_firing_webdriver.EventFiringWebDriver(driver:
se
o
[Link]
event_listener:
se
le
[Link]
Bases: objeto
Um wrapper em torno de uma instância arbitrária do WebDriver que suporta eventos de disparo
[Link].abstract_event_listener.AbstractEventListener) ÿ Nenhum
Cria uma nova instância do EventFiringWebDriver
argumentos
Exemplo:
classe MyListener(AbstractEventListener):
def before_navigate_to(self, url, driver):
print("Antes de navegar para %s" % url) def
after_navigate_to(self, url, driver): print("Depois de navegar para
%s" % url)
voltar() ÿ Nenhum
fechar () ÿ Nenhum
execute_async_script(script, *args)
execute_script(script, *args)
forward() ÿ Nenhum
quit() ÿ Nenhum
driver_envolvido
Retorna a instância do WebDriver agrupada por este EventsFiringWebDriver
classe [Link].event_firing_webdriver.EventFiringWebElement(webelement:
se
le
[Link]
ef_driver:
se
le
[Link]
Bases: objeto
”
Um wrapper em torno da instância WebElement que suporta eventos de disparo
clear() ÿ Nenhum
click() ÿ Nenhum
send_keys(*valor) ÿ Nenhum
wrap_element
Retorna o WebElement agrupado por esta instância EventFiringWebElement
classe [Link].abstract_event_listener.AbstractEventListener
Bases: objeto
after_close(driver) ÿ Nenhum
after_navigate_back(driver) ÿ Nenhum
after_navigate_forward(driver) ÿ Nenhum
after_quit(driver) ÿ Nenhum
before_close(driver) ÿ Nenhum
before_navigate_back(driver) ÿ Nenhum
before_navigate_forward(driver) ÿ Nenhum
before_quit(driver) ÿ Nenhum
[Link].expected_conditions.alert_is_present()
[Link].expected_conditions.all_of(*expected_conditions)
Uma expectativa de que todas as várias condições esperadas são verdadeiras. Equivalente a um 'E' lógico. Retorna: Quando qualquer
ExpectedCondition não for atendida: False. Quando todas as ExpectedConditions forem atendidas: Uma lista com o valor de retorno
de cada condição esperada.
[Link].expected_conditions.any_of(*expected_conditions)
Uma expectativa de que qualquer uma das várias condições esperadas seja verdadeira. Equivalente a um 'OU' lógico. Retorna os resultados da
primeira condição correspondente, ou False se nenhum corresponder.
[Link].expected_conditions.element_attribute_to_include(localizador,
no
tributo_)
Uma expectativa para verificar se o atributo fornecido está incluído no elemento especificado. localizador, atributo
[Link].expected_conditions.element_located_selection_state_to_be(localizador, is_selec
Uma expectativa para localizar um elemento e verificar se o estado de seleção especificado está naquele estado. locator é uma tupla
de (by, path) is_selected é um booleano
[Link].expected_conditions.element_located_to_be_selected(locator)
Uma expectativa para o elemento a ser localizado é selecionada. localizador é uma tupla de (by, path)
[Link].expected_conditions.element_selection_state_to_be(element, is_selected)
Uma expectativa para verificar se o elemento fornecido está selecionado. O elemento é o objeto WebElement is_selected é um
booleano.
[Link].expected_conditions.element_to_be_clickable(mark)
Uma expectativa para verificar um elemento é visível e habilitada de forma que você possa clicar nela.
[Link].expected_conditions.element_to_be_selected(element)
Uma expectativa para verificar a seleção é selecionada. elemento é objeto WebElement
[Link].expected_conditions.invisibility_of_element(element)
Uma expectativa para verificar se um elemento é invisível ou não está presente no DOM.
[Link].expected_conditions.invisibility_of_element_located(locator)
Uma expectativa para verificar se um elemento é invisível ou não está presente no DOM.
[Link].expected_conditions.new_window_is_opened(current_handles)
Uma expectativa de que uma nova janela será aberta e terá o número de identificadores de janelas aumentado
[Link].expected_conditions.none_of(*expected_conditions)
Uma expectativa de que nenhuma de 1 ou várias condições esperadas seja verdadeira. Equivalente a um 'NÃO-OU' lógico. Retorna
um Booleano
[Link].expected_conditions.number_of_windows_to_be(num_windows)
Uma expectativa de que o número de janelas seja um determinado valor.
[Link].expected_conditions.presence_of_all_elements_located(locator)
Uma expectativa para verificar se há pelo menos um elemento presente em uma página da web. localizador é usado para encontrar o
elemento retorna a lista de WebElements uma vez que eles são localizados
[Link].expected_conditions.presence_of_element_located(locator)
Uma expectativa para verificar se um elemento está presente no DOM de uma página. Isso não significa necessariamente
que o elemento esteja visível. localizador - usado para encontrar o elemento retorna o WebElement uma vez localizado
[Link].expected_conditions.staleness_of(element)
Aguarde até que um elemento não esteja mais anexado ao DOM. element é o elemento pelo qual esperar. retorna False se o
elemento ainda estiver anexado ao DOM, true caso contrário.
[Link].expected_conditions.text_to_be_present_in_element(localizador,
texto_)
Uma expectativa para verificar se o texto fornecido está presente no elemento especificado. localizador, texto
[Link].expected_conditions.text_to_be_present_in_element_attribute(local
no
tribo
texto_
Uma expectativa para verificar se o texto fornecido está presente no atributo do elemento. localizador, atributo, texto
[Link].expected_conditions.text_to_be_present_in_element_value(localizador,
texto_)
Uma expectativa para verificar se o texto fornecido está presente no valor do elemento. localizador, texto
[Link].expected_conditions.title_contains(title: str)
Uma expectativa para verificar se o título contém uma substring com distinção entre maiúsculas e minúsculas. title é o fragmento do título
esperado retorna True quando o título corresponder, False caso contrário
[Link].expected_conditions.title_is(title: str)
Uma expectativa para verificar o título de uma página. title é o título esperado, que deve ser uma correspondência exata retorna
True se o título corresponder, false caso contrário.
[Link].expected_conditions.url_changes(url: str)
Uma expectativa para verificar o URL atual. url é a url esperada, que não deve ser uma correspondência exata, retorna True
se a url for diferente, false caso contrário.
[Link].expected_conditions.url_contains(url: str)
Uma expectativa para verificar se o URL atual contém uma substring que diferencia maiúsculas de minúsculas. url é o fragmento de
url esperado, retorna True quando o url corresponder, False caso contrário
[Link].expected_conditions.url_matches(padrão: str)
Uma expectativa para verificar o URL atual. pattern é o padrão esperado, que deve ser uma correspondência exata retorna
True se o URL corresponder, false caso contrário.
[Link].expected_conditions.url_to_be(url: str)
Uma expectativa para verificar o URL atual. url é a url esperada, que deve ser uma correspondência exata retorna True se a
url corresponder, caso contrário, false.
[Link].expected_conditions.visibility_of(element)
Uma expectativa para verificar se um elemento, conhecido por estar presente no DOM de uma página, está visível. Visibilidade
significa que o elemento não é apenas exibido, mas também tem altura e largura maiores que 0. elemento é o WebElement
retorna o (mesmo) WebElement uma vez visível
[Link].expected_conditions.visibility_of_all_elements_located(locator)
Uma expectativa para verificar se todos os elementos estão presentes no DOM de uma página e visíveis. Visibilidade significa
que os elementos não são apenas exibidos, mas também têm altura e largura maiores que 0. localizador - usado para
localizar os elementos retorna a lista de WebElements uma vez que eles são localizados e visíveis
[Link].expected_conditions.visibility_of_any_elements_located(locator)
Uma expectativa para verificar se há pelo menos um elemento visível em uma página da web. localizador é usado para encontrar o
elemento retorna a lista de WebElements uma vez que eles são localizados
[Link].expected_conditions.visibility_of_element_located(locator)
Uma expectativa para verificar se um elemento está presente no DOM de uma página e visível. Visibilidade significa que
o elemento não é apenas exibido, mas também tem altura e largura maiores que 0. localizador - usado para localizar o
elemento retorna o WebElement assim que for localizado e visível
CAPÍTULO 8
descompacte chromedriver_linux64.zip
Você deve ver um executável do chromedriver. Agora você pode criar uma instância do Chrome WebDriver assim:
driver = [Link](executable_path="/caminho/para/chromedriver")
Ref: [Link]
O Selenium delega as consultas XPath para o próprio mecanismo XPath do navegador, portanto, o Selenium oferece suporte a XPath para
tudo o que o navegador suporta. Em navegadores que não possuem mecanismos XPath nativos (IE 6,7,8), o Selenium oferece suporte
apenas a XPath 1.0.
Ref: [Link]
Você pode usar o método execute_script para executar javascript na página carregada. Assim, você pode chamar a API JavaScript para
rolar até o final ou qualquer outra posição de uma página.
89
Machine Translated by Google
Aqui está um exemplo para rolar para a parte inferior de uma página:
driver.execute_script("[Link](0, [Link]);")
a janela objeto no DOM tem um scrollTo para rolar para qualquer posição de uma janela aberta. A altura de rolagem é uma propriedade comum
a todos os elementos. O [Link] fornecerá a altura de todo o corpo da página.
Ref: [Link]
Ref: [Link]
O primeiro passo é identificar o tipo de arquivo que você deseja salvar automaticamente.
Para identificar o tipo de conteúdo que você deseja baixar automaticamente, você pode usar o curl:
Outra maneira de encontrar o tipo de conteúdo é usando as solicitações módulo, você pode usá-lo assim:
importar solicitações
content_type = [Link]('[Link] print(content_type)
Depois que o tipo de conteúdo for identificado, você poderá usá-lo para definir a preferência de perfil do firefox: [Link].
[Link]
import os
fp = [Link]()
fp.set_preference("[Link]",2)
fp.set_preference("[Link]",False) fp.set_preference("[Link]",
[Link]()) fp. set_preference("[Link]", "application/octet-stream ÿÿ")
A opção [Link] especifica o diretório onde você deseja fazer download dos arquivos.
Selecione o elemento <input type="file"> e chame o método send_keys() passando o caminho do arquivo, seja o caminho relativo ao script de
teste ou um caminho absoluto. Lembre-se das diferenças nos nomes de caminho entre os sistemas Windows e Unix.
Primeiro baixe o arquivo Firebug XPI, depois chame o método add_extension disponível para o perfil do firefox:
fp = [Link]()
fp.add_extension(extension='[Link]')
fp.set_preference("[Link]", "1.8.4") #Evite tela de inicialização navegador = [Link](firefox_profile=fp)
CAPÍTULO 9
índices e tabelas
• genindex
• modindex
• procurar
93
Machine Translated by Google
s [Link].abstract_event_listener,
85
[Link], 32
[Link], 59 [Link], 83
[Link], 59 [Link].event_firing_webdriver,
[Link], 58 83
[Link].expected_conditions, [Link].action_chains,
85
41 [Link], 44 [Link], 80
[Link], 47 [Link], 82
[Link].desired_capabilities,
48
[Link].html5.application_cache,
52
[Link], 45
[Link], 48
[Link], 51
[Link], 50
[Link].extension_connection,
57
[Link].firefox_binary,
57
[Link].firefox_profile,
56
[Link], 55
[Link],
53 [Link], 78
[Link], 72
[Link],
74
[Link], 75
[Link].remote_connection,
76
[Link], 77
[Link], 59
[Link],
68
[Link], 80
[Link], 79
95
Machine Translated by Google
Índice
em selecionar
[Link].firefox_profile.FirefoxProfile attribute), 56
__init__()atributo
method), 55 [Link] __init__() ([Link]. ([Link] access_name
[Link]), método 71 ), 53 ActionChains
__init__() (método [Link]), 78 (selecionar
(classe em selecionar
[Link].action_chains), 41
__init__() ([Link] ADD (atributo
[Link]),
([Link] método),
add_command_line_options() método), 75 76 45 __init__()
[Link].firefox_binary.FirefoxBinary __init__()
(método [Link].remote_connection.RemoteConnection), 57 método), 76
(selecionar
97
Machine Translated by Google
(sele
(selecionar [Link]
[Link].abstract_event_listener.AbstractEventListener attribute),
[Link].html5.application_cache),
66 method), 85 (class ApplicationCache
after_click() 52 [Link]. support.abstract_event_listener.AbstractEventListener method), 85 aria_role
([Link] em
attribute), 71 selecionar
[Link].abstract_event_listener.AbstractEventListener ARROW_DOWN ([Link]
(selecionar after_close() method), 85 atributo), 45
ARROW_LEFT ([Link]
after_execute_script() [Link].abstract_event_listener.AbstractEventListener atributo), 45 método), 85 ARROW_RIGHT
([Link] atributo), 45 after_find()ARROW_UP
[Link].abstract_event_listener.AbstractEventListener
([Link] at method), 85 tributo), 45
(selecionar after_navigate_back() assert_process_still_running()
(selecionar
(selecionar
(selecionar (selecionar
(selecionar
no B
back() ([Link]
98 Índice
Machine Translated by Google
([Link].desired_capabilities.DesiredCapabi (atributo de
[Link]
([Link] em selecionar
before_execute_script()([Link].action_chains.ActionChains
attribute),method),
[Link].abstract_event_listener.AbstractEventListener 72 [Link].abstract_event_listener.AbstractEventListener click()
69 method), 85 click() ([Link].event_firing_webdriver.EventFirin
method), 85 method), 41 before_find() click ()
method), 85 before_navigate_back()
(selecionar
(selecionar
(selecionar
(selecionar
(selecionar
(selecionar
remote.remote_connection.RemoteConnecti before_quit()
([Link] method),[Link].abstract_event_listener.AbstractEventListener
61 bidi_connection() close() (selenium .[Link].event_firing_webdriver.EventFirin
method), 76 method), 85
method),
close() 84 Color (classe em
(selecionar
(selecionar
(sele
[Link] method), 61
(selecionar [Link]), 72
method), 80
C
CANCELAR ([Link] no tributo), 45 connect() ([Link].extension_connection.Extension method), 58
Índice 99
Machine Translated by Google
context_click() [Link]), 55
(selecionar
método [Link].action_chains.ActionChains), 42 72
CONTEXT_CONTENT delete_all_cookies() [Link] method),
(sele
61
(sele DELETE_COOKIE [Link]
[Link]), 68
criar_opções() (selecionar
[Link] method), 78
([Link] (selecione o
atributo desejado_capabilities), 67 atributo [Link]), 67 current_window_handle DesiredCapabilities
[Link].desired_capabilities), 48 ( classe sele
67
atributo), 46
46
default_capabilities (selecionar
100 Índice
Machine Translated by Google
[Link].action_chains.ActionChains), 42 dump_json()
(selecionar codificado
([Link].firefox_profile.FirefoxProfile
attribute), 56 END (selenium atributo .[Link]),
(no módulo selecionar
[Link]), 77
46
E ENTER ([Link] no atributo), 46
([Link].desired_capabilities.DesiredCapabilities EQUALSEDGE
([Link] no atributo),
48 tributo), 46 element_attribute_to_include()
ErrorCode
módulo sele [Link].expected_conditions), 86 (no (classe em selecionar
[Link]), 74
ErrorHandler (classe em selecionar
ELEMENT_CLICK_INTERCEPTED (selecionar
[Link]), 75
atributo [Link]), ESCAPE ([Link] no tributo),
74 46 EventFiringWebDriver (classe em
ELEMENT_IS_NOT_SELECTABLE (selecionar [Link].event_firing_webdriver), 83 selecionar
[Link].expected_conditions), 86
(sele
ELEMENT_NOT_INTERACTABLE [Link]
(selecione o atributo attribute), 72 (sele execute_async_script()
[Link]), 74 [Link] method), 61
(selecione ELEMENT_NOT_VISIBLE atributo execute_async_script()
[Link]), 74
ELEMENT_SCREENSHOT (sele
(sele [Link].event_firing_webdriver.EventFiringWeb method),
[Link] 84 execute_script()
attribute), 72 element_selection_state_to_be() (no
módulo sele [Link].expected_conditions), 86 (selecione [Link]
method), 62
execute_script() (selecionar
[Link].event_firing_webdriver.EventFiringWeb method),
element_to_be_clickable() (no módulo sele 84 ExtensionConnection (classe sele
[Link].expected_conditions), 86 [Link].extension_connection), 57 em
Índice 101
Machine Translated by Google
46
F2 (atributo [Link]), 46 F3 (atributo
[Link]), 46 F4 (atributo FIND_ELEMENTS_FROM_SHADOW_ROOT (sele
[Link]), 46 F5 (atributo [Link] attribute), 72
[Link] .[Link] attribute), 46 F6 FIREFOX
([Link] attribute), 46 F7 ([Link].desired_capabilities.DesiredCapa attribute), 48 (sele
([Link] attribute), 46 F8 firefox_profile [Link] attribute), 55 (classe
([Link]. Keys attribute), 46 F9 nium .[Link].firefox_binary), 57 (classe FirefoxProfile FirefoxBinary
([Link] attribute), 46 (sele file_detector [Link].firefox_profile), 56 first_selected_option (sele
[Link] attribute), 67 [Link] attribute), 82
file_detector_context() em selecionar
(sele em selecionar
[Link] method), 62
FIND_CHILD_ELEMENT
(selecione o atributo
[Link]), 72 forward() (método [Link]), 62
(selecione o atributo FIND_CHILD_ELEMENTS forward() (método
[Link]), 72 [Link].event_firing_webdriver.EventFi), 84
frame_to_be_available_and_switch_to_it()
find_connectable_ip() (no módulo sele
[Link]), 50 módulo selecionar
FIND_ELEMENT [Link]),
(selecione o atributo
72 (em [Link].expected_conditions), 86
(no módulo (selecione [Link]), 50
find_element() [Link]. [Link] from_string()
Porto Livre()method), 62 [Link] selecionar
(selecionar
G
GET ([Link] em
homenagem), 72
get() ([Link]
método), 63
método), 62 get() (método [Link].event_firing_webdriver.EventFiringW), 84
find_elements() método (selecionar
GET_ALL_COOKIES
[Link]), 69
find_elements() (selecione o atributo
(selecionar
[Link]), 72
102 Índice
Machine Translated by Google
GET_COOKIE ([Link]
attribute), 72 get_cookie()
(sele
[Link] (sele
method), 63 (sele get_cookies() [Link]
[Link] method), 63 attribute), 73 GET_PAGE_SOURCE
GET_CREDENTIALS
(selecione o atributo
[Link]), 73
(selecione o atributo get_permission() (sele
[Link]), 72 [Link] method),
get_credentials() (sele 79 get_pinned_scripts() (sele
[Link] [Link] method), 63
method), 63 GET_CURRENT_URL get_property()
(sele [Link]
[Link] method), 70 get_remote_connection () (no módulo sele (selecionar
[Link]
method), 69 (sele GET_ELEMENT_ARIA_LABEL
[Link] attribute), 72 (sele get_remote_connection_headers() (sele
GET_ELEMENT_ARIA_ROLE [Link].remote_connection.RemoteConnection método
[Link] attribute), de classe), 77
(sele GET_ELEMENT_ATTRIBUTE nium. 73 GET_SCREEN_ORIENTATION (sele
[Link] attribute), 73 [Link]
GET_ELEMENT_PROPERTY attribute), 73 (sele get_screenshot_as_base64()
[Link] method), 63 (sele
get_screenshot_as_file()
[Link]
method), 63
(selecione o atributo
[Link]), 73
GET_ELEMENT_RECT get_screenshot_as_png() (sele
(selecione o atributo [Link]
[Link]), 73 method), 64 GET_SHADOW_ROOT
GET_ELEMENT_TAG_NAME (sele
(selecione o atributo [Link]
[Link]), 73 attribute), 73 get_timeout() (sele
GET_ELEMENT_TEXT [Link].remote_connection.RemoteConnection
class
(selecione [Link] method), 77
atributo), 73
GET_ELEMENT_VALUE_OF_CSS_PROPERTY (sele GET_TIMEOUTS (sele
[Link] [Link]
attribute), 73 get_full_page_screenshot_as_base64() attribute), 73 GET_TITLE
([Link]
Índice 103
Machine Translated by Google
64 GET_WINDOW_RECT [Link]
atributo), 74
(selecione o atributo InsecureCertificateException, 34 INSERT
[Link]), 73 ([Link] at tributo), 46 (sele
get_window_rect() install_addon() [Link]
(seleciona [Link] method), 54
method), 64 get_window_size()
(sele
[Link] method), INTERNET EXPLORER (selecionar
H atributo [Link]),
(selecionar
INVALID_SELECTOR (sele
[Link]
[Link].desired_capabilities.DesiredCapabilities atributo), 74 atributo), 48 INVALID_SESSION_ID
49 httpProxy ([Link]. atributo [Link]), 49 http_proxy (atributo [Link]),
(selecione o atributo
[Link]), 74
(selecione o atributo INVALID_XPATH_SELECTOR
[Link]), 74
EU
INVALID_XPATH_SELECTOR_RETURN_TYPER (se
ID ([Link] attribute), 47 id
[Link]
([Link]
attribute), InvalidCookieDomainException,
IDLE ([Link].html5.application_cache.ApplicationCache 75 attribute), 71 InvalidArgumentException,
34 attribute),34
52 InvalidCoordinatesException, 35 ( sele
IME_ENGINE_ACTIVATION_FAILED InvalidElementStateException, 35 .[Link] InvalidSelectorException,
35 (no
InvalidSwitchToTargetException, 36 invisibility_of_element() attribute),
módulo74sele
InvalidSessionIdException, 35 IME_NOT_AVAILABLE
[Link].expected_conditions), 86
(sele
[Link]
attribute), 74 ImeActivationFailedException, 33
ImeNotAvailableException, 34 implicitly_wait()
64
104 Índice
Machine Translated by Google
86 [Link].firefox_binary.FirefoxBinary IPAD
([Link].desired_capabilities.DesiredCapabilities method), 57 atributo), 48 ESQUERDA
([Link].
(atributo [Link]),
Atributo IPHONE
desejado_capabilities.DesiredCapabilities), 48 LEFT_ALT ([Link] no tributo), 46 is_connectable()
46
load_json() selecionar
is_selected() [Link]
method), 70 is_url_connectable() (no módulo sele [Link]),
(selecionar
51 M
make() (método estático [Link]), 50
MANUAL (atributo [Link]), 50
maximize_window()
J (sele
JAVASCRIPT_ERROR (selecionar [Link] method), 64 META
Atributo [Link]), 75 ([Link] attribute),
JavascriptException, 36 join_host_port() (em
[Link]), 51 46
módulo selecionar MÉTODO NÃO PERMITIDO (selecionar
atributo [Link]), 75
MINIMIZE_WINDOW
k (sele
[Link]
([Link] at attribute), 73 tributo), 56 minimize_window() key_down() KEY
([Link].action_chains.ActionChains
method), 42
(sele
[Link] method), 64
key_up() ([Link].action_chains.ActionChains
[Link].action_chains.ActionChains method), 43
(selecionar
eu
launch_browser() (selecionar
Índice 105
Machine Translated by Google
MoveTargetOutOfBoundsException, 36 MULTIPLY
([Link] no tributo), 46
46
([Link]
atributo), 67 atributo), 46
([Link]
atributo), 47
attribute), 75atributo),
attribute), 75 NO_SUCH_FRAME [Link] NO_SUCH_ELEMENT
[Link]
[Link]
atributo), 47
(selecionar
(selecionar 59
[Link].expected_conditions), 86 P
PAC ([Link] no tributo), 50
(em PAGE_DOWN ([Link] no
tributo), 47
106 Índice
Machine Translated by Google
Q 67
page_source (atributo [Link]),
atributo PAGE_UP), 47 pai (atributo QUIT ([Link] attribute),
[Link]), 71
([Link] 73 quit()
([Link].extension_connection.ExtensionConn method), 58
R
(sele
rect (atributo [Link]),
[Link] method),
71 REFRESH (atributo
64 port ([Link].firefox_profile.FirefoxProfile
[Link]), 73 refresh()
attribute), 57
(preferências [Link]
([Link] .[Link] method), 65 attribute), 56
release() (método [Link].action_chains.ActionChains Presence_of_all_elements_located()), 43 (em
[Link].expected_conditions), 86
módulo selecionar
Conexão remota (classe sele em
[Link].remote_connection), 76
remove_all_credentials() (sele
PRINT_PAGE ([Link] attribute), [Link] method),
73 print_page()
65 REMOVE_CREDENTIAL
(sele
[Link] method),
(selecione [Link]
64 profile ([Link]
atributo), 73
attribute), 56 Proxy (classe em [Link]),
[Link]
(sele remove_credential()
method), 65 (sele
48 proxy_autoconfig_url (sele REMOVE_VIRTUAL_AUTHENTICATOR
[Link] .[Link] tributo), 49
[Link] attribute),
(sele remove_virtual_authenticator() 73
no
[Link] .WebDriver method),
65 RESERVED_1 (atributo
proxy_type (atributo [Link]), 49
[Link]), 50 reset_actions()
proxyAutoconfigUrl [Link]
tributo), 49 (classe ProxyType [Link]), 50
(selecionar
no
proxyType ([Link]. proxy. Atributo
proxy), 49
em selecionar
(selecionar
[Link].action_chains.ActionChains method),
43 reset_timeout() (seleciona
[Link].remote_connection.RemoteConnection class 77
method),
ProxyTypeFactory (classe em selecionar
[Link]), 50
Índice 107
Machine Translated by Google
(sele
[Link] method),
45
65 SCREENSHOT
[Link] (módulo),
([Link] attribute), 73 screenshot()
48
(selecionar
[Link] (módulo), 51
método [Link]), [Link] (módulo),
70 screenshot_as_base64 atributo
[Link]), 71 50
(selecionar
78
(selecionar
[Link] (módulo), 72
[Link].action_chains.ActionChains method),
44 scroll_from_origin() [Link]
[Link].action_chains.ActionChains method), 44
(selecionar
(módulo), 74
[Link] (módulo), 75
scroll_to_element() (selecionar
[Link].remote_connection
(módulo), 76
[Link].action_chains.ActionChains method),
44 Select (classe em [Link]), 80
select_by_index() (sele [Link] method), [Link]
81 (módulo),
77
[Link] (módulo), 59
[Link]
select_by_value() (sele
[Link] method), 81 (módulo), 68
[Link] (módulo), 80
select_by_visible_text() (sele [Link]
[Link]
method), 81
(módulo), 79
108 Índice
Machine Translated by Google
método [Link]),
send_keys() (método [Link]), 45 55 SET_SCREEN_ORIENTATION
(sele
send_keys() ([Link] [Link]
set_script_timeout() send_keys() attribute), 73
método), 70
([Link].event_firing_webdriver.EventFiringWebElement
([Link]. [Link] method), 65 set_timeout() (sele
método), 85 [Link].remote_connection.RemoteConnection
SEND_KEYS_TO_ELEMENT class method), 77
(selecione o atributo
[Link]), 73
send_keys_to_element() (selecionar
Índice 109
Machine Translated by Google
(em módulo
módulo
selecione title_is() [Link].expected_conditions),
(em
110 Índice
Machine Translated by Google
to_capabilities() (selecionar
[Link]
method), 55 (em módulo sele
url_matches() [Link].expected_conditions), 87
você
UNCACHED
([Link].html5.application_cache.ApplicationCache virtual_authenticator_id
atributo), 52 (sele
UNEXPECTED_ALERT_OPEN (selecionar
[Link] attribute),
atributo [Link]), 68 visibilidade_of() (no módulo sele
75 UnexpectedAlertPresentException, 39 [Link].expected_conditions), 87
UnexpectedTagNameException, 40 uninstall_addon()
(sele
[Link] attribute),
74 until() ([Link]
W3C_ACTIONS ([Link] method),
[Link]
82 attribute), 74 until_not() (método W3C_CLEAR_ACTIONS),
83
(sele
[Link] attribute),
UP (atributo [Link]), 47 74 W3C_DISMISS_ALERT
update_preferences() (sele (sele
[Link].firefox_profile.FirefoxProfile method), [Link] attribute),
56 74 W3C_EXECUTE_SCRIPT
UPDATE_READY (selecionar
(selecione o atributo
atributo [Link].html5.application_cache.ApplicationCache),
[Link]), 74
52 UPLOAD_FILE (atributo [Link]),
74 W3C_EXECUTE_SCRIPT_ASYNC
(selecione o atributo
[Link]), 74
Índice 111
Machine Translated by Google
em selecionar
78
WebDriver (classe em selecionar
[Link]), 59 (classe
[Link]),
WebDriver
79 em selecionar
WebDriverException, 40 (classe
WebDriverWait [Link]), em selecionar
82 (classe em
WebElement selecionar
[Link]), 68 WEBKITGTK
(atributo [Link].desired_capabilities.DesiredCapabilities), 48 which() (selenium. método
[Link].firefox_binary.FirefoxBinary), 57 wifi (atributo
[Link]), 76 WIFI_NETWORK
(selecionar
Tributo [Link]), 76 no
window_handles (seleciona o atributo
[Link]), 68
WPEWEBKIT ([Link].desired_capabilities.DesiredCapabilities
atributo), 48
wrap_driver (selecionar
[Link].event_firing_webdriver.EventFiringWebDriver atributo), 84
wrap_element [Link].event_firing_webdriver.EventFiringWebElement
attribute), 85 (selecionar
112 Índice