java 线程“main”org.openqa.selenium.NoSuchElementException异常:无此类要素:找不到元素:

r6l8ljro  于 2023-04-04  发布在  Java
关注(0)|答案(2)|浏览(179)
System.setProperty("webdriver.chrome.driver","C:/Users/3520/Downloads/chromedriver_win32/chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("--remote-allow-origins=*");
ChromeDriver driver = new ChromeDriver(options);
driver.get("https://leafground.com/select.xhtml");

WebElement dropdown3 = driver.findElement(By.id("j_idt87:auto-complete_input"));

Actions dd = new Actions(driver);
dd.moveToElement(dropdown3).click().perform();
WebElement list = driver.findElement(By.xpath("//*[@id=\"j_idt87:auto-complete_panel\"]/ul/li[4]"));
list.click();

当运行上述代码时,同样失败。帮助解决同样的问题。

f4t66c6m

f4t66c6m1#

假设您要选择下拉列表值,如下所示:

请尝试以下代码:

driver.get("https://leafground.com/select.xhtml");

driver.findElement(By.xpath("(//button)[1]")).click();
new WebDriverWait(driver, Duration.ofSeconds(20)).until(ExpectedConditions.presenceOfElementLocated(By.xpath("//li[text()='Playwright']"))).click();
jrcvhitl

jrcvhitl2#

有几个问题。
1.第一个ID为j_idt87:auto-complete_input的元素是一个INPUT,您单击它。所有这一切都是将光标放在字段中。我假设您的意思是打开下拉列表。
1.你没有任何等待。在第二次点击之前,你肯定需要一个WebDriverWait,但是在第一次点击之前有一个WebDriverWait可能会很有用。如果你要等到一个元素可以点击,使用ExpectedConditions.elementToBeClickable()。存在只是元素存在于DOM中,而不是它可见或准备被点击。
如果是我,我会写一个方法来处理这个问题,因为我假设你会不止一次地使用这个代码。

public static void selectCourse(String courseName) {
    WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
    wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("button[aria-label='Show Options']"))).click();
    wait.until(ExpectedConditions.elementToBeClickable(By.xpath(MessageFormat.format("//li[text()=''{0}'']", courseName)))).click();
}

然后从脚本中调用它作为

selectCourse("Appium");

相关问题