繁体   English   中英

如何在Selenium WebDriver中识别隐藏的文件元素

[英]How to identify a hidden file element in selenium webdriver

球队,

我正在尝试自动执行文件上传功能,但Webdriver无法识别文件对象。 这是东西:

  1. 文件对象在模式框中(模式框的xpath是// * [@@ == modalBoxBody'] / div [1])。 文件对象的类型和名称分别为file和url。
  2. 当我看到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种方法,则似乎未显示该元素,未选中该元素,但已启用IS。 因此,当硒不显示时,硒无法识别它。 使它可见的Java脚本也无法挽救。

谁能帮我解决这个问题。 今天吃了一整天吗?

在您的最后一个示例中,使用'style.visibility'标记对您来说似乎是正确的主意。 我建议尝试尝试的另一件事是使用“ ExpectedConditions.visibilityOfElementLocatedBy”方法。 通常,我使用“ presenceOfElementLocatedBy”,但是如果您谈论的是CSS可见性属性,我认为使用“ visibilityOfElementLocatedBy”是可行的方法。 我认为对您来说可能会发生的事情是,您需要等待要保留的元素对象的等待条件,而“ ExpectedCondtions”方法应该为您提供所需的条件。 我看到您尝试了一些操作,但没有使用Wait条件列出 没有保证,但是您应该尝试:

WebDriverWait wait = new WebDriverWait(driver, 60); 
    wait.until(ExpectedConditions.visibilityOfElementLocated(
         By.xpath(".//whatever")))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM