有条件的自动网络互动

时间:2017-10-12 19:01:56

标签: java selenium-webdriver

我有一个脚本可以与网页交互,上传文件,提交文件并下载响应。最近,控制网站的一方对其进行了一些改动。我正在努力适应这种变化,但我有一个棘手的问题。我正在使用java和selenium打开Chrome浏览器。页面打开。曾经有三个按钮 - 重置按钮,上传按钮和选择文件按钮。部分时间仍属于这种情况。

但是,有时当网站打开时,只有前2个按钮在那里。我发现如果我手动点击上传按钮,页面会刷新并显示选择文件按钮。我现在正试图将其纳入我的代码中。这是问题所在......

    driver.get("http://apps.gdgps.net/apps_file_upload.php");
    System.out.println("test a");
    if (driver.findElement(By.cssSelector("input[class*='upfile_ultimo']"))!= null){
        System.out.println("test a - passed");
        driver.findElement(By.cssSelector("input[class*='upfile_ultimo']")).click();
    }else{
        System.out.println("test a - failed");
        driver.findElement(By.cssSelector("input[id='upload_button']")).click();
        driver.findElement(By.cssSelector("input[class*='upfile_ultimo']")).click();
    }

所以,我得到“测试a”一直打印。如果选择文件按钮存在,我看到“测试 - 通过”并上传文件。如果按钮不存在,我看不到“测试 - 失败”,一切都只是挂起。永远不会按下上传按钮。

我不确定为什么这不起作用。我通过将upload_button行移到if语句之上来进行实验。它独立运行。当它放在if语句中会有什么不同?

1 个答案:

答案 0 :(得分:1)

您不会测试元素为null。如果要查看元素是否存在,请使用.findElements(注意复数)并测试返回的集合是否为空。如果它是空的,则没有找到元素。

driver.get("http://apps.gdgps.net/apps_file_upload.php");
System.out.println("test a");
List<WebElement> upload = driver.findElements(By.cssSelector("input[class*='upfile_ultimo']"));
if (upload.isEmpty())
{
    System.out.println("test a - failed");
    driver.findElement(By.cssSelector("input[id='upload_button']")).click();
    driver.findElement(By.cssSelector("input[class*='upfile_ultimo']")).click();
}
else
{
    System.out.println("test a - passed");
    upload.get(0).click();
}