java - 我可以从 Selenium 调用 AngularJS 函数吗

标签 java angularjs selenium

我的网络应用程序的一部分具有需要上传文件的配置。目前这是使用 AngularJS 实现的

<div ng-file-drop="onFileSelected($files)">Upload Files</div>

使用 Selenium 从文件系统中删除文件似乎几乎是不可能的,并且 SendKeys 方法在这里不起作用,因为我拥有的只是一个 div 而不是 input

替代方案似乎是直接调用 Angular 函数。 我该怎么做?

最佳答案

我很确定您仍然可以在 DOM 中找到带有 type="file" 的输入。

让我们看一个例子 Angular File Upload DEMO page 。有一个 ng-file-upload div,您可以将文件拖放到上面,但是,如果您检查 DOM,您将看到一个实际上负责上传的隐藏文件输入元素 .

我们在测试中可以做的是使输入可见,以便我们可以与其交互并向其发送包含要上传的文件的绝对路径的 key 。使文件输入可见的示例代码:

WebElement fileInput = driver.findElement(By.cssSelector("input[ng-model=files]"));

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].style.visibility = 'visible'; arguments[0].style.overflow = 'visible'; arguments[0].style.height = '1px'; arguments[0].style.width = '1px'; arguments[0].style.opacity = 1", fileInput);

fileInput.sendKeys("/absolute/path/to/a/file");

适用于所提供的 fiddle 的示例代码:

driver.switchTo().frame("result");

// waiting for the element to appear
WebDriverWait wait = WebDriverWait(driver, 10);
WebElement fileInput = wait.until(ExpectedConditions.presencefElementLocated(By.cssSelector("input[ng-model=file]")));

// making the element visible
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].style.visibility = 'visible'; arguments[0].style.overflow = 'visible'; arguments[0].style.height = '1px'; arguments[0].style.width = '1px'; arguments[0].style.opacity = 1",
    fileInput);

fileInput.sendKeys("/absolute/path/to/the/file")

一旦路径发送到输入,就会触发上传过程。

关于java - 我可以从 Selenium 调用 AngularJS 函数吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33863392/

相关文章:

angularjs - 运行数百个测试时, Protractor 无限期挂起,执行时间超过 6 小时

python - (Python)Selenium Webdriver 在获取新 url 后返回旧元素

java - AOP切入点仅适用于带注释的方法

Java 字符串的模运算

javascript - 如何在单击 html 元素时显示 uI-select(angularjs)?

python - 如何使用 Selenium for Python 在另一个选项卡中打开图像?

javascript - 在 Selenium (Firefox/Chrome) 中禁用页面加载时的打印对话框窗口

java - 旋转矩形碰撞

java - CometD 将消息发布回客户端

AngularJS 观察对象数组的数据变化