gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 08:44:13 25 4
gpt4 key购买 nike

我的部分 Web 应用程序具有需要文件上传的配置。目前这是使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com