2017-12-29 37 views
-3

Ich bin neu Selenium-Web-Treiber. Also versuche ich ein Beispiel mit verschiedenen Websites zu erstellen. In einem solchen Muster habe ich versucht, mit der OTTO-Website zu arbeiten und zu versuchen, den Artikel in den Warenkorb zu legen. Hier kommt das Problem, auf dieser Website gibt es ein modales Fenster, bevor Sie den Artikel in den Warenkorb legen.Nicht in der Lage, den Modellwert mit Selen zu lesen

Meine Frage ist, wie man das modale Fenster betritt und auf die Elemente darin zugreift? Unten ist der Code, mit dem ich es versucht habe. Click here to view the image for reference

import java.util.Iterator; 
import java.util.Set; 

import org.openqa.selenium.By; 
import org.openqa.selenium.Keys; 
import org.openqa.selenium.NoSuchElementException; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.support.ui.ExpectedConditions; 
import org.openqa.selenium.support.ui.WebDriverWait; 


public class AutomationTesting { 
    public static void main(String[] args) { 
    System.setProperty("webdriver.gecko.driver","/Users/xxx/eclipse-workspace/seleniumTesting/lib/geckoDriver/geckodriver"); 
    WebDriver driver = new FirefoxDriver(); 
    driver.get("https://www.google.de"); 
    driver.findElement(By.id("lst-ib")).sendKeys("Pepe Jeans"); 
    driver.findElement(By.id("lst-ib")).sendKeys(Keys.ENTER); 
    WebDriverWait wait = new WebDriverWait(driver, 20); 
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.partialLinkText("Pepe Jeans Online-Shop | OTTO"))); 
    driver.findElement(By.partialLinkText("Pepe Jeans Online-Shop | OTTO")).click(); 
    driver.findElement(By.linkText("Pepe Jeans Chiffonkleid »MARY«, im modischen Leo-Muster")).click(); 
    driver.findElement(By.xpath("//ul//li[@data-variationid='594838149']")).click(); 
    driver.findElement(By.id("addToBasket")).click(); 
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("p_layer"))); 
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("or_itemAdded__itemInfo"))); 
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//a[@data-qa='goToBasket']"))); 
    driver.findElement(By.xpath("//a[@data-qa='goToBasket']")).click(); 
    } 
} 
+0

Bitte lesen Sie, warum ein [** 'Screenshot von HTML finden oder Code oder Fehler ist eine schlechte Idee "**" (https://meta.stackoverflow.com/questions/303812/discourage-screenshots-of-code-and-or-rors). Erwägen Sie, die Frage mit formatierten textbasierten HTML- und Code-Tests zu aktualisieren. – DebanjanB

Antwort

0

Das modale Fenster simuliert, keine tatsächlichen Browser-Fenster. Der HTML-Code der Elemente im modalen Fenster befindet sich also auf derselben Seite. Mit DevTool können Sie das einfach überprüfen.

Alle Inhalte des modalen Fenster von einem DIV-Knoten kommen, die id p_layer ist, also können Sie innerhalb Element ab #p_layer

enter image description here

+0

Wenn Sie obigen Code sehen, habe ich #p_layer erwähnt. Aber ich kann immer noch nicht auf die inneren Elemente zugreifen. –

+0

ist der Code in dieser Zeile fehlgeschlagen: wait.until (ExpectedConditions.visibilityOfElementLocated (By.id ("p_layer"))); – yong

+0

Es funktionierte gut mit wait.until (ExpectedConditions.visibilityOfElementLocated (By. ID ("p_layer"))); . Wenn ich versuche, auf die Schaltfläche driver.findElement (By.xpath ("// a [@ data-qa = 'goToBasket']")) zu klicken, klicke(); dann ist es nicht in der Lage zu finden und weiter zu gehen. –

Verwandte Themen