2015-03-02 2 views
0

screenshot of the IFrameorg.openqa.selenium.ElementNotVisibleException когда элемент на самом деле виден

Scenarion: После нажатия кнопки New будет отключить, а затем необходимо ввести данные в поле Имя текстовое поле. Он работает в Mozilla, но не в IE.

IE версии -8 IEDriver -IEDriverServer_x64_2.44.0

+0

Какой код вы пытались? Попробуйте указать какое-то явное ожидание, например 'ExpectedConditions.visibilityOfElementLocated (локатор)' ... спасибо ... –

+0

Я тоже это пробовал .. Ожидание 30 секунд. новый WebDriverWait (драйвер, 30) .until (ExpectedConditions.elementToBeClickable (By.xpath (OR.getProperty (объект)))); – user1700354

+0

может предоставить html в IE, пожалуйста ... –

ответ

0

пытаются использовать альтернативный CSS selector подход, потому что:

  • CSS селекторы выполняют гораздо лучше, чем Xpath и хорошо документированы в Selenium сообщества
  • Двигатели Xpath различны в каждом браузере, поэтому делают их непоследовательным
  • IE не имеет родной xpath, поэтому селен вводит свой собственный движок xpath для совместимости его API. Следовательно, мы теряем преимущество , используя собственные функции браузера, которые WebDriver по своей сути поддерживает .
  • Xpath, как правило, становится сложными и, следовательно, сделать трудно читать в моем мнения Однако есть ситуации, в которых вы должны использовать XPath, например, поиск родительского элемента или поиск элемента его текст (I Wouldn Рекомендуем позже).

Подробнее о сравнении производительности вы можете получить here

После того, как вы начнете делать какие-либо действия на webElements также лучше подождать, пока вся страница не оказывает. Вот некоторые приемы, которые помогут вам: 1) waitForPageLoad() метод:

public void waitForPageLoad(WebDriver driver_) { 

     Wait<WebDriver> wait = new WebDriverWait(driver_, 30); 
     wait.until(new Function<WebDriver, Boolean>() { 
      public Boolean apply(WebDriver driver) { 

       return String 
         .valueOf(((JavascriptExecutor) driver).executeScript("return document.readyState")) 
         .equals("complete"); 
      } 
     }); 
    } 

2) fluentWait метод -An реализация интерфейса Wait, который может иметь свой тайм-аут и интервал опроса настроены на лету.

public WebElement fluentWait(WebDriver driver, final By locator) { 
     Wait<WebDriver> wait = new FluentWait<WebDriver>(driver) 
       .withTimeout(30, TimeUnit.SECONDS) 
         // .pollingEvery(5, TimeUnit.SECONDS) 
       .pollingEvery(1, TimeUnit.SECONDS) 
         // .ignoring(NoSuchElementException.class); 
       .ignoring(org.openqa.selenium.NoSuchElementException.class); 

     WebElement foo = wait.until(
       new Function<WebDriver, WebElement>() { 
        public WebElement apply(WebDriver driver) { 
         return driver.findElement(locator); 
        } 
       } 
     ); 
     return foo; 
    } 

после добавления этих методов вы можете использовать следующие вызовы:

// css selector of the input field: 
String cssSelectorInput="blablabla" 
waitForPageLoad(driver); 
WebElement input= fluentWait(driver, By.cssSelector(cssSelectorInput)); 
input.sendKeys("test name"); 

..... etc 

Надеется, что это помогает.