有条件的自动web交互



我有一个脚本,可以与网页交互、上传文件、提交文件并下载响应。最近,控制网站的一方对它进行了某种改变。我正在努力适应这种改变,但我有一个症结。我正在使用java和selenium来打开Chrome浏览器。页面打开。过去有三个按钮——一个重置按钮、一个上传按钮和一个选择文件按钮。这仍然是部分时间的情况。

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

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语句中时,会有什么不同?

您不测试元素是否为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();
}

最新更新