【问题标题】:Selenium displays NoSuchElementException despite the element being there尽管元素存在,但 Selenium 仍显示 NoSuchElementException
【发布时间】:2019-04-26 12:54:51
【问题描述】:
所以我做了一小段 selenium 代码,但它不允许我选择元素!我不明白。我尝试复制和粘贴示例,但没有任何效果。
上面写着:NoSuchElementException: Unable to locate element #login\-input
这是我的java代码:
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait( 10, TimeUnit.SECONDS );
driver.get( "https://www.ticketmaster.com/review" );
WebElement inputElement = driver.findElement( By.id( "login-input" ) );
【问题讨论】:
标签:
java
selenium
selenium-webdriver
iframe
webdriverwait
【解决方案1】:
您的登录表单位于iframe 内。先切换驱动,试试下面的代码:
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait( 10, TimeUnit.SECONDS );
driver.get( "https://www.ticketmaster.com/review" );
driver.switchTo().frame("loginFrame");
WebElement inputElement = driver.findElement( By.id( "login-input" ) );
inputElement.sendKeys("test");
【解决方案2】:
用户名和密码字段在iframe中,所以你必须:
- 诱导 WebDriverWait 使所需的框架可用并切换到它。
- 诱导 WebDriverWait 使所需的元素可点击。
-
您可以使用以下解决方案:
WebDriver driver = new FirefoxDriver();
driver.get( "https://www.ticketmaster.com/review" );
new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("iframe#loginFrame")));
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("label[for='login-input']"))).sendKeys("FX_NINJA");