【问题标题】:Selenium Error (Java)- Frame is detected but prompted noSuchFrameException when attempting to switch to itSelenium 错误 (Java) - 检测到框架,但在尝试切换到框架时提示 noSuchFrameException
【发布时间】:2021-11-09 14:09:45
【问题描述】:

问题描述:

我无法通过 Chrome v92 切换到特定框架,尽管通过 Firefox 可以轻松切换。

代码示例:

@Test
    void auto_015_5() {
        int bet = 7;        
        driver.navigate().to("https://boademo.com/"); 
        driver.switchTo().frame(0);
        List < WebElement > counters = driver.findElements(By.xpath("//div[@class='counter']"));
        counters.get(0).click();     
        List < WebElement > marketOptions = driver.findElements(By.xpath("//div[@class='au-target market-option row nowrap can-place-bets']"));
        for (int i = 0; i <= (bet * 3) - 1; i += 3) {
            WebElement currentOption = marketOptions.get(i);
            JavascriptExecutor je = (JavascriptExecutor) driver;
            if (i % 6 == 0 && i >= 6) {
                je.executeScript("arguments[0].scrollIntoView(true);", marketOptions.get(i - 6));
            }
            currentOption.click();
        }
        
        driver.switchTo().defaultContent();
        driver.switchTo().frame(1);
    }

复制步骤:

导航到Link

切换到必要的框架(className = 'boa-iframe')

'Matches' Lobby.中选择任何体育赛事

选择任意市场提示投注券(bottom-right).

切换到默认内容。

尝试切换到投注券的框架(className = 'boa-overlay-iframe')

NoSuchFrameException()

html screenshot

【问题讨论】:

  • 请显示您目前尝试过的代码?什么是错误?
  • 错误是没有这样的框架
  • 什么是rt.acceptPopUp(); 特别是rt
  • 不小心把它放在那里了,没什么重要的。 RT 是实例化我的 TestRunner 类的对象。 acceptPopUp 只需单击弹出窗口上的接受按钮
  • 请看下文,它在我的本地工作。我希望它也对你有用。

标签: java selenium firefox iframe selenium-chromedriver


【解决方案1】:
  1. 您可以在显式等待的帮助下切换到iframe
  2. 索引不是首选。

示例代码:

driver.manage().window().maximize();
WebDriverWait wait = new WebDriverWait(driver, 30);
driver.manage().timeouts().implicitlyWait(300, TimeUnit.SECONDS);
driver.get("https://boademo.com/");
wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("button.button-agree"))).click();
int bet = 7;        
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("iframe.boa-iframe")));
List < WebElement > counters = driver.findElements(By.xpath("//div[@class='counter']"));
counters.get(0).click();     
List < WebElement > marketOptions = driver.findElements(By.xpath("//div[@class='au-target market-option row nowrap can-place-bets']"));
for (int i = 0; i <= (bet * 3) - 1; i += 3) {
    WebElement currentOption = marketOptions.get(i);
    JavascriptExecutor je = (JavascriptExecutor) driver;
       if (i % 6 == 0 && i >= 6) {
            je.executeScript("arguments[0].scrollIntoView(true);", marketOptions.get(i - 6));
        }
        currentOption.click();
    }
driver.switchTo().defaultContent();

wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("iframe[class='boa-overlay-iframe']")));
System.out.println("You are inside boa-overlay-iframe");

【讨论】:

  • 该代码确实对我有用,但是我的问题是我无法切换到 className = 'boa-overlay-iframe' 的 iframe。
  • 这个 iframe 在哪里?那是在counters.get(0).click(); 之后吗?
  • 是的。它包含显示在右下角的投注券
  • @NickBorg :在代码底部更新,如果它有效,请告诉我。
  • 不幸的是没有... org.openqa.selenium.TimeoutException:预期条件失败:等待框架可用:By.cssSelector:iframe [class='boa-overlay-iframe'](尝试过30 秒,间隔 500 毫秒)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-11
  • 2021-01-11
  • 1970-01-01
  • 2019-04-04
相关资源
最近更新 更多