selenium web驱动程序中的org.openqa.selenium.ElementNotVisibleException

时间:2015-11-27 09:59:06

标签: java selenium selenium-webdriver

对于html代码,它显示按钮但是输入。

null.Contains(aString)

在selenium webdriver我使用下面的代码它不起作用。

<input id="cmdExport" type="submit" value="Save File" onmouseover="return MVstyle()" onmouseout="return MOstyle()" style="position: absolute; top: 50px; left: 20px; width: 100px; height: 30px; cursor: pointer;">

我也试过

WebElement saveButton = driver.findElement(By.xpath("input[@id='cmdExport']"));
                saveButton.click();

还尝试下面的代码无效请帮助

new WebDriverWait(Driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementIsVisible("cmdExport");
                WebElement saveButton = driver.findElement(By.xpath("input[@id='cmdExport']")).sendKeys("TEXT");
                saveButton.click(); 

我试图发布完整的htmlit非常大,无法发布。

WebElement saveButton = wait.until(ExpectedConditions
      .presenceOfElementLocated(By.id("cmdExport")));

4 个答案:

答案 0 :(得分:0)

org.openqa.selenium.ElementNotVisibleException在元素加载到DOM中但看不到与之交互时发生。在您的情况下,大多数可能的情况可能是,具有相同ID cmdExport的多个元素。因此,Selenium从DOM中获取具有相同id(隐藏)的第一个元素,并触发针对它的操作。

尝试查找为路径定位器返回的元素数。

List<WebElement> saveButtons = driver.findElements(By.xpath("//input[@id='cmdExport']"));

上面的代码将返回与xpath //input[@id='cmdExport']

匹配的所有元素

如果列表大小超过1,则意味着您有多个与给定xpath匹配的Web元素。如果是这样,你必须更加独特地编写xpath来定位所需的元素。

答案 1 :(得分:0)

选项1:使用Actions类:

        WebElement saveButton = driver.findElement(By.xpath("input[@id='cmdExport']"));

        Actions action = new Actions(driver);
        action.click(saveButton).perform();

选项2:注入Javascript

      ((JavascriptExecutor)driver).executeScript("arguments[0].click();", saveButton);

答案 2 :(得分:0)

以下代码可以解决这个问题:

WebElement hoverElement = driver.findElement(By.xpath("input[@id='cmdExport']"));
Actions builder = new Actions(driver);
builder.moveToElement(hoverElement).perform();
By locator = By.id("fileLocation");
driver.click(locator);

它将找到该元素,将鼠标悬停在该元素上,使“a”标记可见,并点击“a”标记。

我希望这会有所帮助。

答案 3 :(得分:0)

尝试使用以下定位器

By.xpath("(//a[@id='cmdExport'])[1]")   //for accessing second element

正如您在评论中提到的那样,

  • 该元素上的mouseOver
  • 然后点击

查看this的mouseOver方法。