我有一个脚本可以与网页交互,上传文件,提交文件并下载响应。最近,控制网站的一方对其进行了一些改动。我正在努力适应这种变化,但我有一个棘手的问题。我正在使用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语句中会有什么不同?
答案 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();
}