gpt4 book ai didi

java - 显式等待返回奇怪的 findElement 值

转载 作者:行者123 更新时间:2023-12-01 08:49:19 24 4
gpt4 key购买 nike

我正在尝试在我的框架中创建一个显式等待方法来处理用户的输入。该方法应该处理所有类型的搜索:id、xpath 和 css。但是,当我尝试测试此方法时,错误返回一个奇怪的错误

显式等待方法

public static void isDisplaying(String variable){
wait = new WebDriverWait(driver,3);
System.out.println("Looking for: " + variable);

if (driver.findElement(By.id(variable)).isDisplayed()){
System.out.println("Found variable via id");
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(variable)));
} else if (driver.findElement(By.xpath(variable)).isDisplayed()) {
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(variable)));
System.out.println("Found variable via xpath");
} else if (driver.findElement(By.cssSelector(variable)).isDisplayed()){
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(variable)));
System.out.println("Found variable via css");
} else {
System.out.println(variable +" is not displayed.");
}
}

我收到的错误:

org.openqa.selenium.NoSuchElementException: Unable to locate element: #\/\/div\[\@id\=\'slideOut\-nav\'\]\/ul\/li\[2\]\/a

我不知道为什么它会返回带有所有这些反斜杠和正斜杠的值。我的猜测是应用程序在尝试使用 id 搜索 xpath 字符串时就失败了。但它不应该转移到下一个 else if 语句吗?如果确实是这个问题,我应该如何处理这个问题?

当我简单地找到该元素并单击时,它工作正常并返回正确的路径:

//div[@id='slideOut-nav']/ul/li[2]/a

我已经在这个问题上陷入了很长一段时间,因此我们将不胜感激!

最佳答案

如果未找到该元素,对 driver.findElement(By.id(variable)) 的调用必然会立即引发异常。

尝试用 driver.findElements() 替换对 driver.findElement() 的调用,因为此调用不会引发异常,但在调用时会返回一个空的 WebElement 列表失败。

如果您真的想构建一个通用方法,那么您应该首先解析 variable 内容以查看它是否代表 xPathcss 最后回退到使用id(或)name

您可以看看this implementation供引用。

关于java - 显式等待返回奇怪的 findElement 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42476979/

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