Я работаю над тестом, но не могу видеть, что вы можете найти раскрывающееся меню на странице. Я смог идентифицировать большинство других элементов на странице. Для одной кнопки мне пришлось реализовать обходное решение 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» на второй строке
Если у кого-то есть лучшее решение или может научить меня альтернативному методу, который обойдет эту ошибку, было бы весьма полезно ,
Не требуется никаких усилий для его решения? :) Потом поздравляю! :) Но, конечно, чтобы добавить комментарий, использование xpath с таким местоположением, как индексирование, не является хорошей идеей, если вы хотите, чтобы он работал динамически :) Я скорее использую driver.findElement (By.xpath (".// * [@ id = 'z_be'] ")), так как это идентификатор, а не то, что вы сделали :), но в любом случае, если вы просто хотите его найти, тогда выберите, у вас не будет проблемы в любом случае для статического программирование :) – jace
@jace Привет Jace проблема заключалась в том, что driver.findElement (By.xpath (".//*[@ id = 'z_be']")) не работал, он не мог найти раскрывающееся меню по какой-либо причине чтобы решить это? – tarquin
как вы узнали, что не было расположено xpath тогда? :) – jace