如何在无头模式下使用 Selenium Webdriver + Java 单击动态链接

问题描述 投票:0回答:1

**我正在尝试使用 Selenium 单击动态链接,当我在 GUI 中运行测试时,它们非常好,因为我使用的方法是从剪贴板复制链接,但在无头模式下,剪贴板的使用不是有可能。

我正在使用多种选项,但到目前为止我还没有成功。任何提示我都会很感激

    WebElement dynamicLinkElement = driver.findElement(By.cssSelector("button[data-test-share-portal-url]"));
    dynamicLinkElement.click();
    Thread.sleep(1000);

    ((JavascriptExecutor) driver).executeScript("window.open()");

    ArrayList<String> tabs1 = new ArrayList<>(driver.getWindowHandles());
    driver.switchTo().window(tabs1.get(1));

    String dynamicLink = getLinkFromClipboard();
    driver.get(dynamicLink);
    Thread.sleep(5000);

    int retryCount = 0;

    // Define the maximum number of retries
    int maxRetries = 10; // Adjust this value as needed

    // Define the URL to check for "not found"

    System.out.println(driver.getCurrentUrl());

    // Retry until the URL is no longer "not found" or the maximum retries are reached
    while (driver.getCurrentUrl().contains("not-found") && (retryCount < maxRetries)) {
        // Wait for 5 seconds before the next retry
        // Refresh the page to try again
        driver.get(dynamicLink);

        Thread.sleep(5000);

        // Increment the retry count
        retryCount++;
    }

    ArrayList<String> tabs0 = new ArrayList<>(driver.getWindowHandles());
    driver.switchTo().window(tabs0.get(0));

    Thread.sleep(3000);
}

 WebElement dynamicLinkElement = driver.findElement(By.cssSelector("button[data-test-share-portal-url]"));
    dynamicLinkElement.click();
    Thread.sleep(1000);

    // Open a new tab using JavaScript
    ((JavascriptExecutor) driver).executeScript("window.open()");

    ArrayList<String> tabs = new ArrayList<>(driver.getWindowHandles());
    driver.switchTo().window(tabs.get(1)); // Switch to the new tab


    // Parse the HTML content of the new tab to extract the dynamic link
    String dynamicLink = extractDynamicLinkFromPageSource(driver.getPageSource());

    if (dynamicLink != null) {
        driver.get(dynamicLink);
        Thread.sleep(5000);

        // Rest of your retry and assertion logic
    } else {
        // Handle the case where dynamicLink is not found
    }

    Thread.sleep(3000);
}

private String extractDynamicLinkFromPageSource(String pageSource) {
    Document document = Jsoup.parse(pageSource);

    // Modify this selector based on your actual HTML structure
    Elements linkElements = document.select("a[data-test-share-portal-url]");

    if (!linkElements.isEmpty()) {
        Element linkElement = linkElements.first();
        String dynamicLink = linkElement.attr("href");
        return dynamicLink;
    }

    return null;
}
java selenium-webdriver google-chrome-headless
1个回答
0
投票

找到答案了! 当您在无头模式下工作时,您的剪贴板将变得不可用,因此我创建了一种方法来复制链接和一个新选项卡。

© www.soinside.com 2019 - 2024. All rights reserved.