Webdriver测试意外暂停

时间:2017-08-22 11:27:43

标签: java selenium-webdriver

我有一个基于Selenium WebDriver的测试用例,在执行期间暂停。它应该上传数千个文件到网站。当它选择要上传的文件时,有时不点击确定,但等待手动交互。在大多数情况下,它工作得很好。 我使用StringSelection将文件源复制并粘贴到输入字段。

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

3 个答案:

答案 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);

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