【问题标题】:Is it possible to switch to an element in a frame without using driver.switchTo().frame("frameName") in Selenium Webdriver Java?是否可以在 Selenium Webdriver Java 中不使用 driver.switchTo().frame("frameName") 切换到框架中的元素?
【发布时间】:2018-05-08 03:05:50
【问题描述】:

我有多个嵌套框架,我需要访问这些框架下的元素。由于这些框架是动态的,我无法访问这些元素。

我是否可以在不使用driver.switchTo().frame() 的情况下访问元素?

喜欢直接使用 xpath 或 jquery、javascript 或其他什么? 欢迎任何建议

【问题讨论】:

  • 使用 xpath 使用 findelement 方法查找 iframe 并将元素传递给 switchto 方法。您也可以使用 index 切换到 iframe。

标签: java selenium selenium-webdriver frames webdriverwait


【解决方案1】:

简单来说,

,如果不切换到预期的 <iframe> 即不使用 driver.switchTo().frame() 将无法访问元素

要切换到预期的框架,您必须使用以下任一方法:

  • 切换框架名称

    driver.switchTo().frame("frame_name");
    
  • 通过Frame ID切换:

    driver.switchTo().frame("frame_id");
    
  • 切换帧索引

    driver.switchTo().frame(1);
    
  • 通过WebElement切换:

    driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@attribute='value']")));
    
  • 切换到父框架

    driver.switchTo().parentFrame();
    
  • 切换到默认内容

    driver.switchTo().defaultContent();
    

但根据最佳实践,您应该始终诱导 WebDriverWait 以使所需的框架可用并切换到它,如下所示: p>

  • 切换框架名称

    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.name("frame_name")));
    
  • 通过Frame ID切换:

    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("frame_id")));
    
  • 通过Frame cssSelector切换:

    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("frame_cssSelector")));
    
  • 通过Frame xpath切换:

    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("frame_xpath")));
    

【讨论】:

    【解决方案2】:

    当你有多个帧时,我认为你不能不使用 driver.switchTo.frame() 切换到一个帧。

    但是你可以使用下面的 xpath 和 ID contains 动态帧:

    "//iframe[contains(@id,'frame')]"
    

    (或)

    您可以尝试在 xpath 中使用框架的 src 属性。

    (或)

    如果您的帧位置相同,您可以使用下面的 xpath 找到帧数或 iframe:

    int noofframes=driver.findelements(By.tagName(“iframe”)).size();
    

    并且使用索引你可以切换到一个特定的框架,然后你可以尝试在框架中找到元素。

    driver.switchTo.frame(i);
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2021-03-30
      • 1970-01-01
      • 2013-07-03
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 2023-03-08
      相关资源
      最近更新 更多