我在玩 selenium ,最近才开始看下拉菜单和选择元素。
为了学习Selenium,我使用以下网站:http://www.smartclient.com/smartgwt/showcase/?sc_selenium=true#featured_dropdown_grid_category
有一个下拉网格,我正试图在其中定位一个元素。由于下拉列表是动态的,并且有一个滚动条,所以我需要向下滚动并定位一个元素。谁能给予我提示,我如何找到并选择这样的下拉列表中的一个元素?假设我想选择:
Item: contains "Envelopes"
Unit: "EA"
Unit Cost: gather then 0.2
下面是我的代码:
By itemPicker = ByScLocator.xpath("/html/body/div[2]/div/div/div/div/div[1]/div[2]/div/div/div[4]/div[1]/div/div/div/div[1]/div/div/div/form/table/tbody[2]/tr[2]/td[2]/table/tbody/tr/td[1]");
driver.findElement(itemPicker).click();
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.elementToBeClickable(itemPicker));
driver.findElement(itemPicker).sendKeys();
boolean find = false;
while (!find) {
By menuItems = ByScLocator.xpath("//tr[contains(@id, \"isc_PickListMenu_\")]");
List<WebElement> all = driver.findElements(menuItems);
try {
//Verify if all elements still exists in DOM
for (WebElement element : all) {
element.findElements(By.tagName("td"));
}
} catch (StaleElementReferenceException e) {
all = driver.findElements(menuItems);
}
for (WebElement element : all) {
List<WebElement> columns = element.findElements(By.tagName("td"));
String currenlyProcessedItem = columns.get(0).getText();
if (currenlyProcessedItem.matches(".*Envelopes.*")) {
if (columns.get(1).getText().equals("Ea")) {
if (Double.parseDouble(columns.get(2).getText()) > 0.2) {
find = true;
element.click();
break;
}
}
}
}
if (find) { //load another set of list items
driver.findElement(By.id("isc_3N")).sendKeys(Keys.PAGE_DOWN);
}
}
问题是,我无法向下滚动列表,并确定我想选择的项目。我也不知道我的方法是否最佳。
3条答案
按热度按时间lndjwyie1#
在此选择列表中只能选择一个项目。我想问题是,你要找的东西不在单子上。只要选择列表处于打开状态,滚动条就不重要。
如果您尝试只选择一个项目,那么这适用于项目“胶水UHU透明胶250ml”
xzv2uavs2#
使用下面的解决方案,我能够在下拉列表中获得要解决的元素。在滚动内容时,实现中有明显的时间依赖性来解释StaleElementExceptions,但我希望这些可以通过多一点努力过滤掉。
如果测试没有立即通过,请尝试将'pollingEvery'时间增加到1/秒。我很确定这将基于它正在运行的机器,这可能需要寻址。
祝你好运。
9njqaruj3#
使用滚动在动态下拉列表中查找元素(Selenium Java)