2016-11-25 8 views
0

Я пытаюсь выбрать элементы в «категории» один за другим на this page с:Выберите элементы по одному в списке с 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"); 

Бросив это: «несвежий опорный элемент: элемент не прилагается к документу страницы «

Возможно, существует какой-то другой способ сделать это?

UPD: Это работает, если я это сделать:

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"); 

Но это правильный путь?

UPD2: Я также попытался это:

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

Но это не работает.

+0

Я думаю, вам нужно взглянуть на то, как выбрать элементы работают в WebDriver http://stackoverflow.com/documentation/selenium-webdriver/6426/select- class # t = 201611251135026517728 рассматривая их так же, как WebElement может привести к некоторому нечетному поведению. – Josh

+0

@ Josh Я обновил свой вопрос. Пожалуйста, проверь это. –

+0

Посмотрев на ошибку: «ссылка на устаревший элемент: элемент не прикреплен к документу страницы», у меня есть один вопрос. Выполняете ли вы операцию, связанную с окном переключения? –

ответ

1

Это было очень неприятно ... проблема в том, что каждый раз, когда вы меняете значение SELECT, страница воссоздает элемент, тем самым вызывая устаревшую ссылку. Вы должны восстановить его в основном каждый раз, когда вы взаимодействуете с ним.

Я вообще делаю функции из таких вещей, чтобы они были повторно использованы.

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()); 
    } 
} 

Вы называете это как

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

Попробуйте это:

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); 

Это должно работать.

+0

Нет, это не работает для меня ( Такая же ошибка: «ссылка на устаревший элемент: элемент не прикреплен к документу страницы» –