Нажатие Ctrl + T не работает в Selenium Webdriver с использованием ActionChains - PullRequest
2 голосов
/ 14 марта 2019

Мне нужно открыть новую вкладку браузера в моем тесте, и я прочитал, что лучший способ - просто отправить соответствующие ключи в браузер.Я использую Windows, поэтому я использую ActionChains(driver).send_keys(Keys.CONTROL, "t").perform(), однако это ничего не делает.

Я попробовал следующее, чтобы проверить, что Keys.CONTROL работает правильно:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
def test_trial():
    driver = webdriver.Chrome()
    driver.get("https://www.google.com/")
    ActionChains(driver).send_keys(Keys.CONTROL, "v").perform()

Это действительно проходитвсе, что я скопировал в буфер обмена в окно поиска Google, которое находится в фокусе по умолчанию.

Это то, что я хочу использовать, но это не работает:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
def test_trial():
    driver = webdriver.Chrome()
    driver.get("https://www.google.com/")
    ActionChains(driver).send_keys(Keys.CONTROL, "t").perform()

Ничего не кажетсяпроизойдет с браузером, не будет открыта новая вкладка, нет диалогового окна, нет уведомления.Кто-нибудь знает, почему это так?

Ответы [ 3 ]

1 голос
/ 14 марта 2019

Попробуйте этот Java Script Executor, он должен работать.

link="https://www.google.com"
driver.execute_script("window.open('{}');".format(link))

Edited код с дескриптором окна.

driver=webdriver.Chrome()
driver.get("https://www.google.com")
window_before = driver.window_handles[0]

link="https://www.google.com"
driver.execute_script("window.open('{}');".format(link))
window_after = driver.window_handles[1]
driver.switch_to.window(window_after)

driver.find_element_by_name("q").send_keys("test")

enter image description here

0 голосов
/ 14 марта 2019

Вы получили несколько хороших ответов, используя выполнение JavaScript, но мне любопытно, почему ваш пример не работает с самого начала.

Возможно, ваша строка ActionChains будет выполнена до полной загрузки страницы; Вы можете попробовать добавить ожидание следующим образом:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
def test_trial():
    driver = webdriver.Chrome()
    driver.get("https://www.google.com/")
    try:
        element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located(By.TAG_NAME("body")))
    ActionChains(driver).send_keys(Keys.CONTROL, "t").perform()
0 голосов
/ 14 марта 2019

попробуйте выполнить этот скрипт:

driver.execute_script("window.open('https://www.google.com');")

например

myURL = 'https://www.google.com'
driver.execute_script("window.open('" + myURL + "');")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...