Ich muss den Link in einem neuen Tab mit Selenium öffnen.
Ist es also möglich, Strg + Klick auf ein Element in Selenium auszuführen, um es in einem neuen Tab zu öffnen?
Verwenden Sie eine ActionChain
mit key_down
, um die Steuertaste zu drücken, und key_up
, um sie freizugeben:
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()
Zwei mögliche Lösungen:
einen neuen Tab öffnen
self.driver = webdriver.Firefox()
self.driver.find_element_by_tag_name('body').send_keys(Keys.COMMAND + 't')
dies ist die Lösung für MAC OSX. In anderen Fällen können Sie die Standard-Keys.CONTROL + 't' verwenden.
einen neuen webdriver öffnen
driver = webdriver.Firefox() #1st window
second_driver = webdriver.Firefox() #2nd windows
Durch den Import von Keys Class können wir mit CONTROL oder SHIFT eine Seite in einem neuen Tab oder einem neuen Fenster öffnen und die folgenden Tasten eingeben: driver.find_element_by_xpath('//input[@name="login"]').send_keys(Keys.CONTROL,Keys.ENTER)
oder
driver.find_element_by_xpath('//input[@name="login"]').send_keys(Keys.SHIFT,Keys.ENTER)
Folgendes habe ich für Selenium WebDriver mit Java-Bindung versucht und es funktioniert für mich ... Wenn Sie den Link manuell in einem neuen Tab öffnen möchten, können Sie dies durch Ausführen von Kontext ausführen ' Möglichkeit. Nachfolgend finden Sie die Implementierung in Selenium-Web-Treiber mit Java-Bindung.
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();
Der Web-Treiber behandelt die neue Registerkarte genauso wie die des neuen Fensters. Sie müssen nach dem Fensternamen zu einer neuen geöffneten Registerkarte wechseln.
driver.switchTo().window(windowName);
Sie können die Fensternamen nachverfolgen, so dass Sie problemlos zwischen Registerkarten navigieren können.