我无法找到下拉列表的动态 Web 元素位置
public void selectClassofService(String value) throws InterruptedException
{
driver.findElement(By.xpath("/html/body/div[1]/div/div/div/div[3]/div[2]/div[2]/div/div/div/div[2]/div[2]/div[2]/form/div[5]/div/div[2]/div/div/div[1]/input")).click();
List<WebElement> list = driver.findElements(By.xpath("/html/body/div[1]/div/div/div/div[3]/div[2]/div[2]/div/div/div/div[2]/div[2]/div[2]/form/div[5]/div/div[2]/div/div/div[1]/input"));
System.out.println("Size of the list size =" + list.size());
for (int i = 0; i < list.size(); i++) {
System.out.println("names of the divisions " + list.get(i).getText());
if (list.get(i).getText().contains(value)) {
list.get(i).click();
break;
}
}
这是我的示例 html 代码
<ui class="vs_dropdown-menu" role="listbox">
<l1 class=vs_dropdown-option role="option">sample pack </l1>
<l2 class=vs_dropdown-option vs vs_dropdown-option--highlight role="option">sample pack </l2>
<l3 class=vs_dropdown-option role="option">sample pack2 </l3>
最佳答案
首先,停止编写太长的 xpath。有更好的方法来访问元素,而不是做那些令人毛骨悚然的事情。
String dropdownXpath = "//input[@class='vs_dropdown-menu' and @role='listbox']";
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath(dropdownXpath))).click();
List<WebElement> myList = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath(dropdownXpath + "//li[@class='vs_dropdown-option' and @role='option']")));
for (WebElement element:myList)
{
System.out.println("names of the divisions " + element.getText());
if(element.getText().contains("Mumbai"));
element.click();
}
如果无法像上面那样访问下拉列表,只需获取父 div 的 Id,如下所示:
String dropdownXpath = "//div[@id='some-id']input[@class='vs_dropdown-menu' and @role='listbox']";
不要浪费时间通过抓取 html 标签来查找元素。
关于java - 如何查找动态下拉列表元素的网页元素位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57972172/