【问题标题】:Download PDF file opening as URL in different tab in selenium在 selenium 的不同选项卡中下载 PDF 文件以 URL 形式打开
【发布时间】:2018-12-27 09:37:28
【问题描述】:

场景:

我有一个应用程序,比如说 A:当我们登录到 A 时,我们有一个链接说 B 点击它会打开一个新的浏览器。 在浏览器 B 中,我们有一个可以打开 pdf 的链接。一旦点击 PDF 在我们打开页面 A 的第二个选项卡中作为 URL 打开。

问题:

我尝试通过窗口句柄使用迭代进行切换,但没有找到。我还尝试在下面添加以找到您在定位器下方的所有窗口句柄。 if(driver.findElement(By.xpath("//*[@id="plugin"]")))

但由于 PDF URL 已在第二个选项卡中打开,我无法获取窗口句柄。我想根据我下面的代码,如果我得到 Window 句柄,那么我将使用机器人类并保存 PDF。

注意:我使用的是 xframium 框架,所以必须定义 WebDriver 驱动程序 = getCustumWebDriver(); 我只能用 IE/Chrome 不能用其他浏览器

关于如何解决的任何建议?

代码:

public String getWindowUrl(String saveDir, SoftAssert softAssert, Element element) {

boolean success = false;
String newWindowUrl = null;

try {
    WebDriver driver = getCustumWebDriver();
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    //current window handle
    String beforWindowHandle = driver.getWindowHandle();
    _wait(2000);
    //Click on the element to which the pdf link is opened
    _click(element);
    waitForPageLoad();
    _wait(30000);

    Set<String> allWindowhandles = driver.getWindowHandles();
    for(String handle1 : allWindowhandles)
    {
        if(!handle1.equals(beforWindowHandle))
        {
            driver.switchTo().window(handle1);
            _wait(2000);
            newWindowUrl = driver.getCurrentUrl();
            docName = newWindowUrl.replaceAll("[^0-9]+", "");
            docName = saveDir.concat(docName).concat(".pdf");
            Robot rb = new Robot();

                rb.keyPress(KeyEvent.VK_CONTROL);
                rb.keyPress(KeyEvent.VK_S);
                _wait(3000);
                rb.keyPress(KeyEvent.VK_CONTROL);
                rb.keyPress(KeyEvent.VK_C);
                rb.keyRelease(KeyEvent.VK_C);
                rb.keyRelease(KeyEvent.VK_CONTROL);

                _wait(1000);

                rb.keyPress(KeyEvent.VK_HOME);
                rb.keyRelease(KeyEvent.VK_HOME);
                _wait(3000);

                StringSelection stringSelection = new StringSelection(saveDir);
                Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
                clipboard.setContents(stringSelection, stringSelection);

                rb.keyPress(KeyEvent.VK_CONTROL);
                rb.keyPress(KeyEvent.VK_V);
                rb.keyRelease(KeyEvent.VK_V);
                rb.keyRelease(KeyEvent.VK_CONTROL);
                rb.delay(3000);
                // _wait(3000);
                rb.keyPress(KeyEvent.VK_ENTER);
                rb.keyRelease(KeyEvent.VK_ENTER);
                _wait(2000);
    }

    }
    success = true;
    driver.close();

}

场景 2: 我可以强制应用程序为 PDF 打开一个新的浏览器窗口,但我无法访问将打开新 PDF URL 的特定窗口。 我将尝试以下方法并给出我的观察:

**for(String handle1 : allWindowhandles)
            {
             // change focus to new tab
                driver.switchTo().window(handle1);
                if(!(driver.findElement(By.id("Element that will be present on browser window 1 - A ")).isDisplayed()||
                         driver.findElement(By.id("Element that will be present on browser window 2 - B ")).isDisplayed()))
{
rb.keyPress(KeyEvent.VK_CONTROL);
                rb.keyPress(KeyEvent.VK_S);
                _wait(3000);
                rb.keyPress(KeyEvent.VK_CONTROL);
                rb.keyPress(KeyEvent.VK_C);
                rb.keyRelease(KeyEvent.VK_C);
                rb.keyRelease(KeyEvent.VK_CONTROL);

                _wait(1000);

                rb.keyPress(KeyEvent.VK_HOME);
                rb.keyRelease(KeyEvent.VK_HOME);
                _wait(3000);

                StringSelection stringSelection = new StringSelection(saveDir);
                Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
                clipboard.setContents(stringSelection, stringSelection);

                rb.keyPress(KeyEvent.VK_CONTROL);
                rb.keyPress(KeyEvent.VK_V);
                rb.keyRelease(KeyEvent.VK_V);
                rb.keyRelease(KeyEvent.VK_CONTROL);
                rb.delay(3000);
                // _wait(3000);
                rb.keyPress(KeyEvent.VK_ENTER);
}**

【问题讨论】:

  • 新浏览器或新标签页?如果是新标签,我可以提供帮助,您也可以在不访问 A 的情况下访问 B 吗?
  • @NeaguV- 它正在打开一个新的浏览器弹出窗口而不是新标签

标签: selenium pdf selenium-webdriver


【解决方案1】:

据我了解,您所指的应用程序的开发人员已配置在新选项卡中启动 pdf。因此我们无法在同一选项卡中打开它,因为它已在应用程序标签中配置。

【讨论】:

    【解决方案2】:

    只要调用这个方法:

    public void switchToNEWwindow(){
        try{
            ArrayList<String> newTab = new ArrayList<String> (driver.getWindowHandles());
            driver.switchTo().window(newTab.get(1));
        }
        catch(Exception e){}
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-12
      • 2018-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      相关资源
      最近更新 更多