2017-10-12 24 views
0

我有一个脚本可以与网页交互,上传文件,提交文件并下载响应。最近,控制该网站的一方对此做出了某种改变。我正在尝试适应变化,但我有一个难点。我使用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”打印所有的时间。如果选择文件按钮存在,我会看到“测试通过”并上传文件。如果按钮不存在,我不会看到“测试 - 失败”,并且所有内容都会挂起。上传按钮从不按下。

我不知道为什么这不起作用。我通过移动if语句上方的upload_button行来进行实验。它独立运行。放入if语句时会有什么不同?

回答

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(); 
} 
+0

谢谢。你的代码比我的更优雅。不过,它在失败时仍然不会点击上传按钮。尽管如此,传球依然奏效。顺便说一句,它从不打印“测试 - 失败”。这是否意味着它不会为if语句找到否定的结果,而只会认可肯定的结论? – Iakona

+0

在你最近运行这个代码的时候,按钮总是在那里。您可能需要添加一个等待,具体取决于页面等。 – JeffC

+0

我已经等了30分钟。它不会出错。它只是挂在那里,直到我手动点击上传按钮。然后它继续前进。 – Iakona