我有一个与网页交互、上传文件、提交文件并下载响应的脚本。最近,控制该网站的一方对其进行了某种更改。我正在努力适应这种变化,但我有一个症结所在。我正在使用 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();
}
所以,我一直打印“test 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();
}
关于java - 有条件的自动化网络交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46717081/