首页 文章

是否可以在Selenium Webdriver Java中使用driver.switchTo() . frame(“frameName”)切换到框架中的元素?

提问于
浏览
1

我有一个多个嵌套框架,我需要访问这些框架下的元素 . 由于这些帧是动态的,我无法访问这些元素 . Is it possible for me to access the elements without using driver.switchTo().frame()

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

2 回答

  • 2

    简单来说,

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

    要切换到预期的帧,您必须使用以下任一项:

    • 切换 Frame Name
    driver.switchTo().frame("frame_name");
    
    • 切换 Frame ID
    driver.switchTo().frame("frame_id");
    
    • 切换 Frame Index
    driver.switchTo().frame(1);
    
    • 切换 WebElement
    driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@attribute='value']")));
    
    • 切换到 Parent Frame
    driver.switchTo().parentFrame();
    
    • 切换到 Default Content
    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")));
    
  • 0

    当你有多个帧时,我不认为你可以在不使用driver.switchTo.frame()的情况下切换到一个帧 .

    但您可以使用如下所示的xpath,其中包含动态帧的ID:

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

    (要么)

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

    (要么)

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

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

    使用索引可以切换到特定的框架,然后您可以尝试在框架中查找元素 .

    driver.switchTo.frame(i);
    

    希望这可以帮助 .

相关问题