【发布时间】:2015-10-07 04:51:17
【问题描述】:
在我的测试中,我下载了一个文件,该文件运行良好,但后来当我尝试单击某个元素时,我无法滚动到视图中,页面底部的 chrome 下载对话框挡住了路。无法将我需要点击的按钮移动到视图中,那么有没有办法使用 chrome webdriver 关闭该下载框?
【问题讨论】:
标签: java google-chrome selenium webdriver
在我的测试中,我下载了一个文件,该文件运行良好,但后来当我尝试单击某个元素时,我无法滚动到视图中,页面底部的 chrome 下载对话框挡住了路。无法将我需要点击的按钮移动到视图中,那么有没有办法使用 chrome webdriver 关闭该下载框?
【问题讨论】:
标签: java google-chrome selenium webdriver
您可以使用org.openqa.selenium.interactions.Actions 类移动到元素view:
WebElement element = driver.findElement(By.id("my-id"));
Actions actions = new Actions(driver);
actions.moveToElement(element);
// actions.click();
actions.perform();
【讨论】:
否,目前无法通过 Selenium/WebDriver 访问(并因此关闭)浏览器(在您的情况下为 chrome)的下载对话框。
driver.findElement(yourLocator).click();
假设你的按钮是这样的:
<input id="my-button" class="button" type="submit" value="Click">
然后你可以定义你的定位器如下:
By yourLocator = By.id("my-button");
【讨论】:
您可以使用下面的代码 sn-p 打开您的下载网页,然后将其关闭并返回您的目标页面:
action.sendKeys(Keys.CONTROL+ "j").build().perform();
action.keyUp(Keys.CONTROL).build().perform();
Thread.sleep(500);
ArrayList<String> tabs2 = new ArrayList<String> (driverChrome.getWindowHandles());
driverChrome.switchTo().window(tabs2.get(1));
Thread.sleep(500);
driverChrome.close();
driverChrome.switchTo().window(tabs2.get(0));
Thread.sleep(500);
【讨论】:
发送控制键对我不起作用,但我开发了一种解决方法。我在新窗口做任何下载测试,然后关闭下载窗口,原来的窗口没有下载栏。它必须是一个新窗口,如果您创建一个新选项卡,它将转移过来,为此我使用 JavaScript。切换到新窗口,运行下载测试,完成后切换到原来的窗口。
string javascript = $"$(window.open('', '_blank', 'location=yes'))";
((IJavaScriptExecutor)Driver).ExecuteScript(javascript); //create new window
Driver.SwitchTo().Window(Driver.WindowHandles.Last())); //switch to new window
//do download test here
Driver.Close(); //close created window
Driver.SwitchTo().Window(Driver.WindowHandles.First()); //back to original window with no download bar
【讨论】: