我有一个基于Selenium WebDriver
的测试用例,在执行期间暂停。它应该上传数千个文件到网站。当它选择要上传的文件时,有时不点击确定,但等待手动交互。在大多数情况下,它工作得很好。
我使用StringSelection
将文件源复制并粘贴到输入字段。
StringSelection cp = new StringSelection(fileSource);
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(cp, null);
答案 0 :(得分:1)
我认为您的测试可能会快速运行?如果是这种情况,那么你可能会使用WebDriverWait ?? WebDriverWait可以用来等待“好”。单击之前可见的元素,因此继续进行。
我可能错了,但如果没有剩下的代码我就无法说出问题所在。
就个人而言,我使用以下方法然后调用
public void waitForElementToBeVisible(String cssSelector) throws Throwable {
try {
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.or(
ExpectedConditions.visibilityOfElementLocated(By.cssSelector(cssSelector))
));
} catch (Exception e) {
System.out.println("Timeout exceeded");
closeDriver();
}
}
答案 1 :(得分:1)
对于行为"当它选择要上传的文件时,有时不点击确定,但等待手动交互。在大多数情况下,它工作得很好。"我更喜欢使用失败的重试次数。点击的每一步都应该包含在测试中,如果测试结果=失败 - 重试测试一些次数(3或5)。 JUnit有很好的机制:
@RunWith(Runner.class)
public abstract class AbstractTest extends LibTest {
@Rule
public JUnitRetry retry = new JUnitRetry(3);
}
public class Test extends AbstractTest
@Test
public void testCp(String fileSource){
StringSelection cp = new StringSelection(fileSource);
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(cp, null);
}
}
答案 2 :(得分:0)
以下代码适用于我们环境中的类似场景。
StringSelection cp = new StringSelection(fileSource);
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(cp, null);
Robot robot=new Robot();
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
我们也可以使用AutoIT来执行此类型的操作。
请找到AutoIT代码来处理这种情况。
下载AutoIT,将此代码写入AutoIT,将其命名为“Loadfromdisk”并编译。将生成.exe,请将exe放在本地驱动器中(例如:E:\ Loadfromdisk.exe)
AutoItSetOption("WinTitleMatchMode","2") ;
$title=WinGetTitle("[CLASS:DirectUIHWND; INSTANCE:2]")
WinActivate($title)
WinWaitActive($title)
If WinExists($title) Then
WinFlash($title,"", 4, 500) ;Just to Flash the window
EndIf
Sleep(1000)
ControlSetText($title, "", "Edit1", fileSource)
Sleep(1000)
ControlClick($title,"","Button1")
Exit
从磁盘Selenium Java代码加载,这会将放置在AutoIT代码中提到的'filesource'路径的文件加载到Web应用程序中
String strAutoIT = "E:\\Loadfromdisk.exe";
Thread.sleep(3000);
String[] astrArg = null;
astrArg=new String[]{strAutoIT};
Runtime.getRuntime().exec(astrArg);
请查看这是否有助于运行您的测试用例。