Как мне нажать «Копировать» ссылку с реализацией Selenium ChromeDriver Java - PullRequest
1 голос
/ 08 мая 2020

Как мне нажать кнопку «Копировать» с этого URL-адреса https://www.w3resource.com/java-exercises/basic/java-basic-exercise-249.php

enter image description here

Тег, который мне нужен щелчок помечен как "Копировать"

См. прикрепленное изображение.

enter image description here

Пожалуйста, посмотрите мой код ниже.

    String url = "https://www.w3resource.com/java-exercises/basic/java-basic-exercise-249.php";
    System.setProperty("webdriver.chrome.driver", "/usr/local/bin/chromedriver");
    ChromeOptions options = new ChromeOptions();
    options.setPageLoadStrategy(PageLoadStrategy.NONE);
    options.addArguments("--no-sandbox");
    //options.addArguments("--headless");
    options.addArguments("start-maximized");
    options.addArguments("disable-infobars");
    options.addArguments("--disable-extensions");

    ChromeDriver driver = new ChromeDriver(options);
    driver.get(url);
    driver.manage().timeouts().implicitlyWait(40, TimeUnit.SECONDS);
    WebDriverWait wait = new WebDriverWait(driver,30);
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//a[text()='Copy']")));

Журнал ошибок выглядит так:

    INFO: Detected dialect: W3C
Exception in thread "main" org.openqa.selenium.TimeoutException: Expected condition failed: waiting for visibility of element located by By.xpath: //a[text()='Copy'] (tried for 30 second(s) with 500 milliseconds interval)
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:53'
System info: host: 'studentmacbookpro.local', ip: '2406:e003:8ae:4201:9caf:932f:bb9:64e4%en0', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.15.3', java.version: '9.0.4'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion:     81.0.4044.138, chrome: {chromedriverVersion: 81.0.4044.138 (8c6c7ba89cc9..., userDataDir: /var/folders/j0/ktvnz6n91kg...}, goog:chromeOptions: {debuggerAddress: localhost:49653},  javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: none, platform: MAC, platformName: MAC, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:virtualAuthenticators: true}
Session ID: 127865859a666d5c2e508415f9d94b3f
    at org.openqa.selenium.support.ui.WebDriverWait.timeoutException(WebDriverWait.java:95)
    at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:272)
    at src.ChromeDriverMac.main(ChromeDriverMac.java:33)

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Здесь кнопка «Копировать» становится доступной только при наведении курсора на фрагмент кода.

Этого можно достичь, используя приведенный ниже код -

    Actions action = new Actions(driver);
    action.moveToElement(driver.findElement(By.cssSelector("div.code-toolbar"))).moveToElement(driver.findElement(By.xpath("//a[text() = 'Copy']"))).click().build().perform();

Здесь я импортирую класс Actions для реализации действия мыши. После импорта я говорю своему классу действий перейти в раздел фрагмента кода, сначала перейдя к части moveToElement (), а затем перейдите к кнопке копирования, а затем нажмите кнопку.

Для получения дополнительных сведений вы можете go с помощью действия мыши и клавиатуры.

0 голосов
/ 08 мая 2020

Эта кнопка появляется только тогда, когда вы наводите на фрагмент кода мышку. В вашем примере вы просто открываете страницу.

См. Этот вопрос, чтобы узнать, как навести указатель мыши на элемент: Как выполнить функцию наведения указателя мыши в Selenium WebDriver, используя Java?

После этого вы увидите кнопку «Копировать».

UPD:

Другая вещь, которая может вызвать вашу проблему, - это то, что просматриваемый элемент вверх с By.xpath("//a[text()='Copy']") не тот, который вы ожидаете увидеть. По сути, вы ждете видимости элемента, который соответствует указанному xpath fist в вашей DOM.

На странице есть несколько фрагментов, и каждый имеет свою кнопку «Копировать». Вы могли ожидать, что кнопка из второго фрагмента будет видна, однако ваш официант ожидает кнопку из первого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...