2016-11-21 2 views
1

Я работаю над тестом, но не могу видеть, что вы можете найти раскрывающееся меню на странице. Я смог идентифицировать большинство других элементов на странице. Для одной кнопки мне пришлось реализовать обходное решение JavaScript, которое я действительно не понимаю, поэтому это может быть аналогичной проблемой. Я не уверен, как реализовать это в этом случае (выпадающее меню), как это было для кнопки.Selenium find a drop dropdown

Как бы то ни было, в раскрывающемся списке используется тег Select.

<div id="z_bc" class="dco"> 
<div class="dco_c"> 
<table class="d_FG" role="presentation"> 
<tbody> 
<tr> 
<tr id="z_bd"> 
<td class="fct_w" colspan="2"> 
<div class="d2l-select-container"> 
<select id="z_be" class="vui-input d2l-select" name="z_be"> 
<option value="1" selected="selected">All conditions must be met</option> 
<option value="2">Any condition must be met</option> 
</select> 
</div> 
</td> 
</tr> 
</tbody> 
</table> 
</div> 
</div> 

че хотите выбрать второй вариант: "Любое условие должно быть выполнено"

Мой код выглядит следующим образом:

//test begins 
npc.setHeadline(headline); 
npc.setContent(content); 
npc.click_create_and_attach(); 
Thread.sleep(1000); 
ManageWindowFocus mwf = new ManageWindowFocus(); 
mwf.switch_to_pop_up_window(driver); 

//driver.manage().window().fullscreen(); 
driver.switchTo().frame(driver.findElement(By.xpath("//iframe[starts-with(@name, 'd2l_cntl_')]"))); 


Select conditiontype = new Select(driver.findElement(By.id("z_b"))); 
Thread.sleep(1000); 
conditiontype.selectByIndex(6); 
Select role = new Select(driver.findElement(By.id("z_g"))); 
//select role = Student 
Thread.sleep(1000); 
role.selectByIndex(14); 
driver.switchTo().defaultContent(); 
Thread.sleep(1000); 
driver.findElement(By.linkText("Create")).click(); 
mwf.revert_to_parent_window(driver); 
driver.switchTo().defaultContent(); 
Thread.sleep(1000); 

WebElement access = driver.findElement(By.xpath("//select[@id='z_be']")); 
Select dropdown = new Select(access); 
Thread.sleep(1000); 
dropdown.selectByIndex(1); 

Метод revert_to_parent_windows выглядит следующим образом:

public void revert_to_parent_window(WebDriver driver){ 
    ///this method returns the handle of a second window that pops up 

    Set<String> AllWindowHandles = driver.getWindowHandles(); 
    String window1 = (String) AllWindowHandles.toArray()[0]; 
    String window2 = (String) AllWindowHandles.toArray()[1]; 

    driver.switchTo().window(window1); 



} 

Я получаю сообщение об ошибке, когда пытаюсь определить список drowpdown:

WebElement access = driver.findElement(By.xpath("//select[@id='z_be']")); 

Ошибка: Не удалось найти элемент: { "метод": "XPath", "селектор": "// выберите [@ ид = 'z_be']"}

Я также попытался с помощью CSSSelector:

WebElement access = driver.findElement(By.cssSelector("select[id=z_be]")); 

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

Не уверен, что это проблема с возвратом в исходное окно или если есть проблема с поиском самого раскрывающегося списка.

EDIT

мне удалось получить эту работу прямо сейчас, используя абсолютную XPath:

WebElement access = driver.findElement(By.xpath("html/body/div[7]/div/div[3]/div/div/div[1]/form/div/table[5]/" 
     + "tbody/tr[3]/td/div/table/tbody/tr[2]/td/div/div/table/tbody/tr[2]/td/div/select")); 

Но когда я попытался с помощью XPath это на самом деле, кажется, работает, но с другая ошибка:

WebElement access = driver.findElement(By.xpath(".//*[@id='z_be']")); 
Select dropdown = new Select(access); 

с ошибкой: UnexpectedTagNameException: элемент должен быть «выбран», но был «div» на второй строке

Если у кого-то есть лучшее решение или может научить меня альтернативному методу, который обойдет эту ошибку, было бы весьма полезно ,

+0

Не требуется никаких усилий для его решения? :) Потом поздравляю! :) Но, конечно, чтобы добавить комментарий, использование xpath с таким местоположением, как индексирование, не является хорошей идеей, если вы хотите, чтобы он работал динамически :) Я скорее использую driver.findElement (By.xpath (".// * [@ id = 'z_be'] ")), так как это идентификатор, а не то, что вы сделали :), но в любом случае, если вы просто хотите его найти, тогда выберите, у вас не будет проблемы в любом случае для статического программирование :) – jace

+0

@jace Привет Jace проблема заключалась в том, что driver.findElement (By.xpath (".//*[@ id = 'z_be']")) не работал, он не мог найти раскрывающееся меню по какой-либо причине чтобы решить это? – tarquin

+0

как вы узнали, что не было расположено xpath тогда? :) – jace

ответ

0

Я не мог получить параметр Выбор рабочего, но я нашел обходной путь, выполнив следующие действия:.

driver.findElement (By.cssSelector ("Опция [значение = '2']")) нажмите();

 Смежные вопросы

  • Нет связанных вопросов^_^