Selenium 解决弹出 winform 上传文件框时,代码无法继续执行问题

喵喵 · 2018年11月28日 · 1525 次阅读

场景:
测试过程中需要触发选择本地文件进行上传操作。

问题:
以前用 Selenium2,直接使用 AotuIT 可以直接上传,现在改用 Selenium3,在点击选择按钮,弹出选择窗体后,代码停止执行了,除非将选择窗体关闭,代码才会继续执行。

可能原因:
在弹出系统选择窗体后,线程被挂起了,不会再继续执行,这只是我觉得。

解决办法:
单独开启线程执行上传文件操作,让主线程和上传文件线程同时进行,如图:

环境:
Firefox:49.0.1
Selenium:3.8.1

示例代码:
火狐浏览器设置:
火狐右键 - 属性,在目标中,追加: -no-romote -profilemanager

创建一个配置:

测试类示例如下:

@Test
    public void Test() throws InterruptedException{
    //声明浏览器driver设置后打开,前往目标地址 
        WebDriver driver;
        System.setProperty("webdriver.gecko.driver", "file/geckodriver.exe");
        System.setProperty("webdriver.firefox.bin", "C:\\Program Files\\Mozilla Firefox\\firefox.exe");
        ProfilesIni pi = new ProfilesIni();
       //获取firefox浏览器的用户配置方案
        FirefoxProfile profile = pi.getProfile("selenium"); 
        FirefoxOptions options = new FirefoxOptions();
        options.setProfile(profile);
        driver = new FirefoxDriver(options);
        driver.get("https://www.XX.com/");
        Thread.sleep(2000);

    //声明点击上传按钮
        WebElement upload_btn = driver.findElement(By.id("fileImg"));

    //声明上传线程类,并启动
        MyTestThread myth= new MyTestThread();
        myth.start();
       //点击上传按钮
        upload_btn.click();
      //此处需要等待大于3秒的时间,或者有足够操作步骤,来等待完成上传线程中的一些列操作
        Thread.sleep(4000);
       }
}

上传线程类,示例如下:

public class MyTestThread extends Thread{
    File file=new File("E:\\workspace\\selenium\\file\\Chrysanthemum.jpg"); 

    public void run (){

        try {
           //使该线程强制等待3秒,目的是等待Windows窗口弹出再执行autoit脚本
            Thread.sleep(3000);
        } catch (InterruptedException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }       


        String cmd="\"C:\\upload.exe\" \"firefox\" \"C:\\1.jpg\"";
        try{
            Process p= Runtime.getRuntime().exec(cmd);
            p.waitFor();
        } catch(Exception e) {
            e.printStackTrace();
        } 

}
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 0 条回复 时间 点赞
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册