2016-11-25 1 views
0

Ich versuche Elemente in "Kategorie" one-by-one auf this page mit wählen:Wählen Sie Elemente einzeln in Drop-Down-Liste mit Selenium WebDriver

WebElement category = new WebDriverWait(driver, 10) 
       .until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("tr[__gwt_row='" + rowIndex + "'] > td > div"))) 
       .get(3); 

     category.click(); 
     category.findElement(By.tagName("select")).sendKeys("Businesses"); 
     category.click(); 
     category.findElement(By.tagName("select")).sendKeys("Contacts"); 

Werfen Sie diese: „abgestanden Element Referenz: element ist nicht an das Seitendokument angehängt "

Vielleicht existiert noch ein anderer Weg, es zu tun?

UPD: Es funktioniert, wenn ich dies tun:

WebElement categoryBusinesses = new WebDriverWait(driver, 10) 
       .until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("tr[__gwt_row='" + rowIndex + "'] > td > div"))) 
       .get(3); 

     categoryBusinesses.findElement(By.tagName("select")).sendKeys("Businesses"); 

WebElement categoryContacts = new WebDriverWait(driver, 10) 
       .until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("tr[__gwt_row='" + rowIndex + "'] > td > div"))) 
       .get(3); 

     categoryContacts.findElement(By.tagName("select")).sendKeys("Contacts"); 

Aber ist es ein richtiger Weg?

UPD2: Ich habe auch versucht dies:

WebElement element = categoryBusinesses.findElement(By.tagName("select")); 
     Select category = new Select(element); 
     category.selectByIndex(0); 
     category.selectByIndex(1); 

Aber es nicht funktioniert.

+0

Ich glaube, Sie brauchen einen Blick auf, wie Select-Elemente arbeiten in WebDriver http://stackoverflow.com/documentation/selenium-webdriver/6426/select- class # t = 201611251135026517728 Wenn Sie sie wie ein WebElement behandeln, kann dies zu einem merkwürdigen Verhalten führen. – Josh

+0

@Josh ich habe meine Frage aktualisiert. Überprüfen Sie bitte das. –

+0

Nach dem Blick auf den Fehler: "Veraltete Element Verweis: Element ist nicht an das Seitendokument angehängt", habe ich eine Frage. Machst du eine Switch-Fenster-Operation? –

Antwort

1

Das war wirklich nervig ... Das Problem ist, dass jedes Mal, wenn Sie den Wert von SELECT ändern, die Seite das Element neu erstellt, was dazu führt, dass Ihre Referenz veraltet wird. Sie müssen es im Grunde jedes Mal neu holen, wenn Sie mit ihm interagieren.

Ich mache normalerweise Funktionen aus solchen Dingen, so dass sie wiederverwendbar sind.

public static void GetCategoriesFromRow(int row) 
{ 
    By locator = By.cssSelector("table[__gwtcellbasedwidgetimpldispatchingfocus] tr[__gwt_row='" + row + "'] select"); 
    for (int i = 0; i < new Select(driver.findElement(locator)).getOptions().size(); i++) 
    { 
     new Select(driver.findElement(locator)).selectByIndex(i); 
     System.out.println(new Select(driver.findElement(locator)).getFirstSelectedOption().getText()); 
    } 
} 

Sie nennen es wie

driver.get("http://samples.gwtproject.org/samples/Showcase/Showcase.html#!CwCellTable"); 
new WebDriverWait(driver, 10) 
     .until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("table[__gwtcellbasedwidgetimpldispatchingfocus]"))); 
GetCategoriesFromRow(0); 
0

Versuchen Sie folgendes:

WebElement element = categoryBusinesses.findElement(By.xpath("//*[@id="gwt-debug-contentPanel"]/div[2]/div/div[2]/div/div[3]/div/div/div/table/tbody/tr[1]/td/table/tbody[1]/tr[1]/td[4]/div/select")); 
     Select category = new Select(element); 
     category.selectByIndex(0); 
     category.selectByIndex(1); 

Diese funktionieren sollte.

+0

Nein, es funktioniert nicht für mich ( Der gleiche Fehler: "Veraltete Element Referenz: Element ist nicht an das Seitendokument angefügt") –

Verwandte Themen