网络驱动程序测试意外暂停



我有一个基于Selenium WebDriver的测试用例,它在执行过程中暂停。它应该将数千个文件上传到网站。当它选择要上传的文件时,它有时不会单击确定,而是等待手动交互。在大多数情况下,它运行良好。 我使用StringSelection将文件源复制并粘贴到输入字段。

StringSelection cp = new StringSelection(fileSource);
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(cp, null);

我认为您的测试可以快速运行吗?如果是这种情况,那么您可能会使用 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();
}
}

对于行为"当它选择要上传的文件时,有时不会单击确定,而是等待手动交互。在大多数情况下,它运行良好。我更喜欢使用失败的重试计数。单击的每个步骤都应包含在测试中,如果测试结果=失败 - 重试测试几次(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);
}
}

下面的代码适用于我们环境中的类似场景。

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 somwhere放在本地驱动器中(例如: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代码中提到的"文件源"路径中的文件加载到Web应用程序中

String strAutoIT = "E:\Loadfromdisk.exe";
Thread.sleep(3000);
String[] astrArg = null;
astrArg=new String[]{strAutoIT};
Runtime.getRuntime().exec(astrArg);

请查看这是否有助于运行您的测试用例。

最新更新