团队,如何识别selenium webdriver中的隐藏文件元素
我试图自动化文件上传功能,但webdriver无法识别文件对象。这是事情:
- 该文件对象是在一个模式框(xpath是模式框是//* [@ id ='modalBoxBody']/div [1])。文件对象的类型和名称分别是文件和URL。
- 当我看到html内容时,有两个具有相同属性的对象。其中一个是可见的,另一个是不可见的。但是他们所属的层次是不同的。所以我使用的元素是可见的层次结构。
以下是我的代码。我已经尝试了所有可能的解决方案提供的stackoverflow(尽可能多的搜索),但没有任何工作。注释掉的部分意味着它们也被尝试并失败。
wbdv.findElement(By.xpath("//*[@id='left-container']/div[4]/ul/li/ul/li[2]/a")).click();
wbdv.switchTo().activeElement();
System.out.println(wbdv.findElement(By.xpath("//*[@id='modalBoxBody']/div[1]")).isDisplayed()); **//This returns true**
List<WebElement> we = wbdv.findElement(By.xpath("//*[@id='modalBoxBody']/div[1]")).findElement(By.className("modalBoxBodyContent")).findElements(By.name("url")); **//There is only one element named url in this hierarchy**
System.out.println(we.isEmpty()); //This returns false meaning it got the element named url
//((JavascriptExecutor) wbdv).executeScript("document.getElementsByName('url')[0].style.display='block';"); **//This didn't work**
for(WebElement ele: we){
String js = "arguments[0].style.height='auto'; arguments[0].style.visibility='visible';";
((JavascriptExecutor) wbdv).executeScript(js, ele);
System.out.println(ele.isDisplayed()); **//This returns FALSE**
System.out.println(ele.isEnabled()); **//This returns TRUE**
System.out.println(ele.isSelected()); **//This returns FALSE**
ele.click(); **//This throws org.openqa.selenium.ElementNotVisibleException exception**
}
现在,如果你看看上面的3种方法,看起来该元素不显示,不选择但启用。所以当它不显示时,硒不能识别它。使其可见的Java脚本也无法挽救。
任何人都可以请帮我解决这个问题。它今天吃了我整整一天吗?
感谢您的回复。我实际上使用了隐式的等待方法。另外,我在显示模式框后尝试了20秒的睡眠方法。我认为20秒是足够时间显示元素的时间。然而,visibilityOfElementLocatedBy也失败了,因为它似乎永远不会变为可见。 – Prabhat
我认为你可以改进JavaScript执行者的方式。此外,您可以尝试使用ByChained By定位器在两个步骤中获取元素。将测试分解成更多的较小测试步骤,您将更可能发现问题。 – djangofan