3

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

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

喜欢直接使用 xpath 或 jquery、javascript 或任何东西?欢迎任何建议

4

2 回答 2

4

简单来说,

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

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

  • 通过Frame Name切换:

    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以使所需的帧可用并切换到它,如下所示:

  • 通过Frame Name切换:

    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")));
    
于 2017-11-24T11:18:54.973 回答
1

当您有多个帧时,我认为您不能在不使用 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);

希望这可以帮助。

于 2017-11-24T07:11:19.300 回答