gpt4 book ai didi

java - Selenium:在 Java 中搜索 By 定位器的子项

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:11:01 24 4
gpt4 key购买 nike

我在页面上有一个 WebElements 的按定位器枚举列表。我希望能够使用枚举的组合以及我希望选择的选项值的附加信息来选择选择框的特定选项。有什么办法吗?我注意到 By 类也有方法 findElement(searchContext)。我可以按照以下方式使用它吗:

public enum Dictionary {

TYPE (By.id("vehType")),
PROVINCE (By.id("provId")),
TERRITORY (By.id("territoryId")),
STAT_CODE (By.id("statCodeId")),
CLASS (By.id("class1Id"));

private final By locator;

private DetailVehicleDictionary (By value) {
this.locator = value;
}

public By getLocation() {
return this.locator;
}
}

然后如果 CLASS 是一个带有 HTML 的选择框:

<select id="class1Id" name="select_box">
<option value="1"/>
<option value="2"/>
<option value="3"/>
</select>

我可以按照以下方式做一些事情吗:

WebElement specificValue = driver.findElement(Dictionary.CLASS.getLocation().findElement(By.cssSelector("option[value=2]"));

我需要访问实际元素,以便我可以等待值出现在 DOM 中。我计划在等待命令中实现它,例如:

wait.until(ExpectedConditions.presenceOfElementLocated(specificValue));

最佳答案

Selenium 有一个 special mechanism处理“选择/选项”案例:

import org.openqa.selenium.support.ui.Select;  // this is how to import it

WebElement select = driver.findElement(Dictionary.CLASS.getLocation());
Select dropDown = new Select(select);
dropDown.selectByValue("1");

后续问题的答案:使用 Explicit Wait :

WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement select = wait.until(ExpectedConditions.presenceOfElement(Dictionary.CLASS.getLocation()));

如果等待选项在选择中加载,恐怕您需要制作自定义 ExpectedCondition(未测试):

public static ExpectedCondition<Boolean> selectContainsOption(
final WebElement select, final By locator) {

return new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver driver) {
try {
return elementIfVisible(select.findElement(locator));
} catch (StaleElementReferenceException e) {
return null;
}
}
};
}

用法:

WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement select = wait.until(ExpectedConditions.presenceOfElement(Dictionary.CLASS.getLocation()));
WebElement option = wait.until(selectContainsOption(select, By.cssSelector('.//option[@value = "1"]')));

关于java - Selenium:在 Java 中搜索 By 定位器的子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28372142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com