2016-09-30 1 views
2

Ich habe Probleme mit der Funktion, die darauf wartet, dass Elemente sichtbar sind, wenn die Selentests in MicrosoftEdge ausgeführt werden. Vor allem, wenn sich ein Element über einem anderen Element befindet. Kann jemand dieses Problem lösen? Gibt es eine JavaScript-Funktion, mit der ich sicherstellen kann, dass der Benutzer das Element sieht und darauf klicken kann?waitForElementVisible in Selenium funktioniert nicht in MicrosoftEdge

Hier ist, was ich verwende jetzt

function waitForElementDisplay (selector, time) { 
      if (document.querySelector(selector) != null) { 
       return true; 
      } 
      else if (timeLimit < timeSince) { 
       return false; 
      } 
      else { 
       timeSince += time; 
       setTimeout(function() { 
        waitForElementDisplay(selector, time, timeLimit, timeSince); 
       }, time); 
      } 
     } 

Antwort

0

Ja, Selen einige Male Probleme hat. Habe nie mit Edge gearbeitet, hatte aber ähnliche Probleme mit anderen Browsern.

Was ich normalerweise tue ist, einen Wiederholungswrapper zu schreiben und dann "document.getElementById" (oder etwas) innerhalb des Skript-Executors zu verwenden, um eine Elementreferenz innerhalb des Skript-Executors zu erhalten. Ich versuche es einige Male mit X Sekunden Verzögerung.

Das folgende Beispiel in Java zeigt, wie ich darauf warte, dass ein Element in DOM zugänglich wird. (Ich bin mit cucumberJVM)

@When("^questionnaire response is loaded$") 
public void questionnaire_response_is_loaded() throws Throwable { 

    Predicate<WebDriver> isLoaded = new Predicate<WebDriver>() { 
     @Override 
     public boolean apply(WebDriver webDriver) { 
      Object obj = ((JavascriptExecutor) webDriver).executeScript(
        "return (!document.getElementById('idNotification'))" 
      ); 
      // if element is present the result will turn false, so we have to negate it 
      return !((Boolean) obj); 
     } 
    }; 

    WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), 10); 
    wait.until(isLoaded); 
} 
+0

hast du beispiel codE? – Jasmine

+0

hinzugefügt Beispielcode, den ich in meinem Projekt verwende –

0

Das Verfahren waitForElementVisible prüft nur, dass das Element mit einer Größe wiedergegeben wird und Opazität überlegen 0. Es prüft nicht, ob das Element durch ein menschliches Auge sichtbar ist oder nicht.

Sie könnten diese JavaScript-Funktion überprüfen verwenden, wenn ein Element sichtbar und anklickbar ist:

function isClickable(element) { 
    var doc = element.ownerDocument || document, 
    win = doc.defaultView || window, 
    rect = element.getBoundingClientRect(), 
    elemAt = doc.elementFromPoint(rect.left + (rect.width >> 1), rect.top + (rect.height >> 1)); 

    for (var e = elemAt; e; e = e.parentElement) { 
    if (e === element) return !elemAt.disabled && win.getComputedStyle(elemAt, null).getPropertyValue('pointer-events') !== 'none'; 
    } 
    return false; 
} 

Beachten Sie, dass es falsch zurück, wenn das Element nicht in die Ansicht gescrollt. Daher müssen Sie zuerst element.scrollIntoView() anrufen.

Verwandte Themen