web-dev-qa-db-fra.com

Envoyer les touches contrôle + clic dans Selenium avec des liaisons Python

Je dois ouvrir le lien dans un nouvel onglet en utilisant Selenium.

Est-il donc possible d'effectuer un Ctrl + clic sur un élément de Sélénium pour l'ouvrir dans un nouvel onglet?

13
micgeronimo

Utilisez une ActionChain avec key_down pour appuyer sur la touche de navigation et key_up pour la relâcher:

import time
from Selenium import webdriver
from Selenium.webdriver.common.action_chains import ActionChains
from Selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()

driver.get('http://google.com')
element = driver.find_element_by_link_text('About')

ActionChains(driver) \
    .key_down(Keys.CONTROL) \
    .click(element) \
    .key_up(Keys.CONTROL) \
    .perform()

time.sleep(10) # Pause to allow you to inspect the browser.

driver.quit()
24
Louis

Deux solutions possibles:

ouvrir un nouvel onglet

self.driver = webdriver.Firefox()
self.driver.find_element_by_tag_name('body').send_keys(Keys.COMMAND + 't') 

c'est la solution pour MAC OSX. Dans d’autres cas, vous pouvez utiliser le clavier standard Keys.CONTROL + 't'

ouverture d'un nouveau WebDriver

driver = webdriver.Firefox() #1st window
second_driver = webdriver.Firefox() #2nd windows 
7
aberna

Vous trouverez ci-dessous ce que j'ai essayé pour Selenium WebDriver avec la liaison Java et que cela fonctionne pour moi . Si vous souhaitez ouvrir manuellement le lien dans un nouvel onglet, vous pouvez y parvenir en effectuant un contexte. Cliquez sur le lien et sélectionnez "Ouvrir dans un nouvel onglet. 'option. Vous trouverez ci-dessous l'implémentation dans le pilote Web Selenium avec liaison Java.

Actions newTab= new Actions(driver);
WebElement link = driver.findElement(By.xpath("//xpath of the element"));

//Open the link in new window
newTab.contextClick(link).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ENTER).build().perform();

Le pilote Web gère le nouvel onglet de la même manière que celui de la nouvelle fenêtre. Vous devrez passer à un nouvel onglet ouvert par son nom de fenêtre.

driver.switchTo().window(windowName);

Vous pouvez suivre les noms de fenêtre qui vous aideront à naviguer facilement entre les onglets.

0
Rupesh Shinde