使用 Selenium 和 Java 自动化基于 bootstrap 的下拉菜单
Automating jQuery based bootstrap dropdown using Selenium and Java
我试图列出 bootstrap 下拉列表中的所有元素,然后 select 某个值。但是,它 returns 0 值。任何建议将不胜感激。
driver.findElement(By.id("imgSelectButton")).click();
Thread.sleep(3000);
List<WebElement> list = driver.findElements(By.xpath("//ul/li[@class='logoSelectOpt']//li"));
System.out.println(list.size());
for(int i=0; i<list.size(); i++){
System.out.println(list.get(i).getText());
if (list.get(i).getText().contains("History")){
list.get(i).click();
break;
}
}
DOM:
<div class="logoSelect" style="z-index:1; top:878px;">==[=14=]
<ul>
<li class="logoSelectOpt" id="12" onmouseover="jQuery(QWE01Title.activate(this);" onmouseout="jQuery(QWE01Title.deactivate(this);" onmousedown="jQuery(QWE01Title.selectItem(this);" logoColor="#FFF">Facts</li>==0
<li class="logoSelectOpt" id="12" onmouseover="jQuery(QWE01Title.activate(this);" onmouseout="jQuery(QWE01Title.deactivate(this);" onmousedown="jQuery(QWE01Title.selectItem(this);" logoColor="#FFF">History</li>==0
<li class="logoSelectOpt" id="12" onmouseover="jQuery(QWE01Title.activate(this);" onmouseout="jQuery(QWE01Title.deactivate(this);" onmousedown="jQuery(QWE01Title.selectItem(this);" logoColor="#FFF">Opinions</li>==0
<li class="logoSelectOpt" id="12" onmouseover="jQuery(QWE01Title.activate(this);" onmouseout="jQuery(QWE01Title.deactivate(this);" onmousedown="jQuery(QWE01Title.selectItem(this);" logoColor="#FFF">Questions</li>==0
</ul>
</div>
元素是jQuery enabled element so to locate the elements you have to induce WebDriverWait for the visibilityOfAllElementsLocatedBy()
and you can use either of the following :
使用 cssSelector:
driver.findElement(By.id("imgSelectButton")).click();
List<WebElement> list = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("div.logoSelect > ul li.logoSelectOpt")));
System.out.println(list.size());
for(int i=0; i<list.size(); i++){
System.out.println(list.get(i).getText());
if (list.get(i).getText().contains("History")){
list.get(i).click();
break;
}
}
使用 xpath:
driver.findElement(By.id("imgSelectButton")).click();
List<WebElement> list = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//div[@class='logoSelect']/ul//li[@class='logoSelectOpt']")));
System.out.println(list.size());
for(int i=0; i<list.size(); i++){
System.out.println(list.get(i).getText());
if (list.get(i).getText().contains("History")){
list.get(i).click();
break;
}
}
我试图列出 bootstrap 下拉列表中的所有元素,然后 select 某个值。但是,它 returns 0 值。任何建议将不胜感激。
driver.findElement(By.id("imgSelectButton")).click();
Thread.sleep(3000);
List<WebElement> list = driver.findElements(By.xpath("//ul/li[@class='logoSelectOpt']//li"));
System.out.println(list.size());
for(int i=0; i<list.size(); i++){
System.out.println(list.get(i).getText());
if (list.get(i).getText().contains("History")){
list.get(i).click();
break;
}
}
DOM:
<div class="logoSelect" style="z-index:1; top:878px;">==[=14=]
<ul>
<li class="logoSelectOpt" id="12" onmouseover="jQuery(QWE01Title.activate(this);" onmouseout="jQuery(QWE01Title.deactivate(this);" onmousedown="jQuery(QWE01Title.selectItem(this);" logoColor="#FFF">Facts</li>==0
<li class="logoSelectOpt" id="12" onmouseover="jQuery(QWE01Title.activate(this);" onmouseout="jQuery(QWE01Title.deactivate(this);" onmousedown="jQuery(QWE01Title.selectItem(this);" logoColor="#FFF">History</li>==0
<li class="logoSelectOpt" id="12" onmouseover="jQuery(QWE01Title.activate(this);" onmouseout="jQuery(QWE01Title.deactivate(this);" onmousedown="jQuery(QWE01Title.selectItem(this);" logoColor="#FFF">Opinions</li>==0
<li class="logoSelectOpt" id="12" onmouseover="jQuery(QWE01Title.activate(this);" onmouseout="jQuery(QWE01Title.deactivate(this);" onmousedown="jQuery(QWE01Title.selectItem(this);" logoColor="#FFF">Questions</li>==0
</ul>
</div>
元素是jQuery enabled element so to locate the elements you have to induce WebDriverWait for the visibilityOfAllElementsLocatedBy()
and you can use either of the following
使用 cssSelector:
driver.findElement(By.id("imgSelectButton")).click(); List<WebElement> list = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("div.logoSelect > ul li.logoSelectOpt"))); System.out.println(list.size()); for(int i=0; i<list.size(); i++){ System.out.println(list.get(i).getText()); if (list.get(i).getText().contains("History")){ list.get(i).click(); break; } }
使用 xpath:
driver.findElement(By.id("imgSelectButton")).click(); List<WebElement> list = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//div[@class='logoSelect']/ul//li[@class='logoSelectOpt']"))); System.out.println(list.size()); for(int i=0; i<list.size(); i++){ System.out.println(list.get(i).getText()); if (list.get(i).getText().contains("History")){ list.get(i).click(); break; } }