是否有任何类型的API可以让我在Firefox中操作文件下载对话框?(我想访问用户做某事时出现的那个,而不是自己发起一个).
我想要做的是从Selenium访问这个对话框(以及Selenium"特权模式"是否足以访问chrome接口是我不确定的事情).
我看到很多人在使用Selenium WebDriver在测试环境中上传文件时遇到问题.我使用selenium WebDriver和java,并遇到了同样的问题.我终于找到了解决方案,所以我会在这里发布,希望它能帮到别人.
当我需要在测试中上传文件时,我点击按钮中的Webdriver并等待弹出窗口"打开".然后我将路径复制到剪贴板中的文件,然后将其粘贴到"打开"窗口并单击"确定".这是有效的,因为当弹出窗口"打开"时,焦点始终在"打开"按钮中.
您将需要这些类和方法:
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.awt.Toolkit;
import java.awt.datatransfer.StringSelection;
public static void setClipboardData(String string) {
StringSelection stringSelection = new StringSelection(string);
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection, null);
}
Run Code Online (Sandbox Code Playgroud)
这就是我在打开"打开"窗口后所做的事情:
setClipboardData("C:\\path to file\\example.jpg");
//native key strokes for CTRL, V and ENTER keys
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
Run Code Online (Sandbox Code Playgroud)
就是这样.这对我有用,我希望它适合你们中的一些人.
我正在将Selenium WebDriver与java.awt.Robot结合使用,以更好地模拟用户与Web应用程序的交互.是的,我知道这可能是不必要的,但我服务的客户要求它.
目前事情进展顺利,但我有一个小问题,我似乎找不到一个好的方法来获取屏幕位置的网页元素.标题栏,菜单栏,导航栏等内容都会将内容向下推到物理屏幕上(Robot从中获取坐标),但对Selenium报告元素的位置没有影响.
当我调用:element.getLocation();在Selenium WebElement上时,它总是给我相对于HTML内容呈现窗格的位置,而不是浏览器窗口本身.
更好的例证是:driver.findElement(By.tagName("body")).getLocation();无论窗口的实际屏幕位置如何,始终返回0,0.
现在我通过在最大化窗口后添加垂直和水平偏移来攻击它,但是这些在不同的浏览器之间是不一样的(例如,IE的顶部装饰占据了比Firefox更多的空间),并且对于每个用户可能是不同的如果他们有书签工具栏,搜索栏等添加.
是的,我知道我可以在全屏模式下运行,但是如果可能的话,我宁愿不这样做.
有没有办法使用WebDriver以可靠的方式获取元素的物理屏幕位置?