#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"));