2016-09-22 5 views
1

Das Problem ist einfach. Ich muss auf ein Element in einem Popup klicken, das von JavaScript-Code generiert wird. Die Seite ist nur in IE verfügbar und die Elemente im Popup können nicht ausgewählt werden, wenn die Entwickler-Tools aktiviert sind. Im Grunde kenne ich den xpath nicht, aber ich habe das Javascript, das das Popup erzeugt. Dies ist das Pop-up auf der Seite:Selen finden Element in einem Javascript-Popup

Popup on page

Und dies ist der JavaScript-Code, um das Popup erzeugt:

function pickDefaultType() { 
    // create popup 
    thePopup = window.createPopup(); 
    var doc = thePopup.document; 
    var body = doc.body; 

    // add stylesheet 
    var oSheet = doc.createStyleSheet(); 
    oSheet.addRule("TD", "cursor: hand; font-family: Verdana, Arial, sans-serif; font-size: " + $('body').css('font-size') + ";"); 
    oSheet.addRule(".TableStyle", "overflow-y: auto; overflow-x: visible;"); 
    oSheet.addRule(".DivStyle", "height: 100%; overflow-y: auto; overflow-x: visible; border: #C1D3E7 1px solid; color: #404040"); 
    oSheet.addRule(".tableHeading", "background-color: #326894; color: white;"); 

    // create scrolling div 
    var theDiv = thePopup.document.createElement("DIV"); 
    theDiv.className = "DivStyle"; 

    body.appendChild(theDiv); 
    theDiv.innerHTML = "<table cellpadding='2' cellspacing='0' width='100%' height='100%'><tr><td id='0'>" + sam.appStrings.defaultDateTypeNone + "</td><tr><tr><td id='1'>" + sam.appStrings.defaultDateTypeCurrent + "</td><tr><tr><td id='2'>" + sam.appStrings.defaultDateTypeOffset + "</td><tr><tr><td id='3'>" + sam.appStrings.defaultDateTypeFixed + "</td><tr></table>"; 
    var theTable = theDiv.firstChild; 
    theTable.className = "TableStyle"; 
    theTable.style.display = ""; 
    theTable.onclick = selectDefaultType; 
    theTable.onmouseover = mouseOver; 
    theTable.onmouseout = mouseOut; 

    // deterine size to show the popup 
    thePopup.show(10, 10, 10, 10, typeSpan); 
    var tableWidth = theTable.offsetWidth + 18; 
    var tableHeight = theTable.offsetHeight + 2; 

    thePopup.show(0, typeSpan.clientHeight + 2, tableWidth, tableHeight, typeSpan); 
} 

Ich habe versucht, das Element "None" mit XPath und id Ortung, habe ich warte auch, z

WebDriverWait wait = new WebDriverWait(webDriver, 3); 
WebElement elem = wait.until(ExpectedConditions.elementToBeClickable(By.id("0"))); 

Ich habe auch versucht, die Alert-Klasse von Selen:

Alert promptAlert = webDriver.switchTo().alert(); 
    String alertText = promptAlert.getText(); 
    System.out.println("Alert text is " + alertText); 

Das Element kann nicht gefunden werden. Die Warnung ist nicht vorhanden.

Wenn das Popup in einem Rahmen ist, wie finde ich den Namen, um darauf zu wechseln?

Bitte beachten Sie, dass ich das Dropdown-Menü erfolgreich mit Selenium geöffnet habe, kann einfach nicht die Elemente finden, um darauf zu klicken.

Vielen Dank im Voraus!

+0

Ich wurde von einem Entwickler gesagt, dass. HTC-Dateien verwendet werden, um das Popup zu rendern. Kann ich dann auf die Elemente in diesem Popup zugreifen? –

Antwort

0

Manchmal können wir nicht mit webDriver auf Elemente im Popup zugreifen, in diesem Fall können wir JavascriptExecutor verwenden, um dieses Element zu finden. Es scheint, dass Sie die "ID" des Elements kennen, bitte versuchen Sie den folgenden Code, um auf das Element zuzugreifen.

WebElement ele =(WebElement) ((JavascriptExecutor)driver).executeScript("return document.getElementById("yourElementId")); 
+0

Ich habe Folgendes versucht: WebElement ele = (WebElement) ((JavascriptExecutor) webDriver) .executeScript ("return document.getElementById ('1')"); ele.click(); aber NullPointerException bei dem Klick –

+0

zuerst wechseln, um zu alarmieren und dann zu versuchen. –

+0

Wenn Sie die Existenz von iframe überprüfen möchten, können Sie folgenden Code verwenden Liste iframes = driver.findelements (by.tagname ("iframe" ')); Überprüfen Sie die Größe() der Liste wie iframes.size(), um die Existenz von iFrame zu gewährleisten. –

Verwandte Themen