selenium.interactions.Класс Actions для копирования / вырезания / вставки не работает в браузере Chrome — Автоматизация тестирования Selenium

#selenium #selenium-chromedriver

#selenium #selenium-chromedriver

Вопрос:

Я должен скопировать объект (текст / фигуру) в моем приложении и вставить его в другую область.

В этом случае я должен вставить независимо от WebElement. Поэтому я не могу использовать это —

driver.findElement(By.id("")).sendKeys(Keys.chord(Keys.CONTROL,"v"));

Итак, я использую класс Actions в selenium — selenium.interactions.Actions

 actions.keyDown(command).sendKeys("c").keyUp(command).build().perform();
  

Этот метод не работает Chrome72 и chromedriver 72 .

Я сталкивался с этой проблемой много месяцев. И просматривайте веб-страницы в поисках решений, и есть много сайтов, говорящих об этом —

https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/5946

Но не смог найти никаких ответов, и проблема все еще существует в самых последних версиях chrome и chromedriver.

Ответ №1:

Похоже, что в G Chrome есть lyer, который предотвращает эти ярлыки:

https://bugs.chromium.org/p/chromedriver/issues/detail?id=581

И это не будет исправлено.

Возможно, вы могли бы найти решение. В моем случае для Ctrl T я использую

 ((JavascriptExecutor) driver).executeScript("window.open('about:blank', '_blank');");
  

Другой вариант — использовать робота, но он будет работать только в активном окне. Это не будет работать при параллельном тестировании. Это не сработает, если вы работаете одновременно. При этом команды будут отправляться на компьютер, а не в браузер. И ваше окно должно быть активным:

 // Create instance of Robot class
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
  

Я надеюсь, что это поможет. Как я уже сказал, это работает не каждый раз 😉

Комментарии:

1. Спасибо вам за ответ. Для открытия новой вкладки это сработало бы. Но мне нужно решение для копирования / вырезания / вставки. Пожалуйста, поделитесь любыми обходными путями для этого.

2. Обновлено. Я надеюсь, что это помогает

3. Спасибо, Дэвид. Я попробую это и дам вам знать.

Ответ №2:

Я бы посоветовал использовать клавиши Control a в вашем коде перед копированием, поскольку вам может потребоваться сначала выделить весь текст, а затем скопировать текст.

 driver.findElement(By.id("xyz")).sendKeys(Keys.chord(Keys.CONTROL, "a"));
driver.findElement(By.id("xyz")).sendKeys(Keys.chord(Keys.CONTROL, "c"));