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

在Selenium Webdriver Java中,是否可以在不使用driver.switchTo().frame(“frameName”)的情况下切换到框架中的元素?,java,selenium,selenium-webdriver,frames,webdriverwait,Java,Selenium,Selenium Webdriver,Frames,Webdriverwait,我有多个嵌套框架,需要访问这些框架下的元素。由于这些帧是动态的,我无法访问这些元素 我是否可以在不使用驱动程序的情况下访问元素。切换到().frame() 比如直接使用xpath或jquery、javascript或其他什么? 欢迎您提供任何建议我认为当您有多个帧时,不使用driver.switchTo.frame()就无法切换到帧 但您可以使用如下xpath,ID包含用于动态帧: "//iframe[contains(@id,'frame')]" (或) 您可以尝试在xpath中使用框架的s

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

我是否可以在不使用
驱动程序的情况下访问元素。切换到().frame()

比如直接使用xpath或jquery、javascript或其他什么?
欢迎您提供任何建议

我认为当您有多个帧时,不使用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);
希望这有帮助。

简单地说

,如果不切换到预期的
即不使用
驱动程序,则无法访问元素。切换到().frame()

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

  • 通过帧名称切换:

    driver.switchTo().frame("frame_name");
    
    driver.switchTo().frame("frame_id");
    
    driver.switchTo().frame(1);
    
    driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@attribute='value']")));
    
    driver.switchTo().parentFrame();
    
    driver.switchTo().defaultContent();
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.name("frame_name")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("frame_id")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("frame_cssSelector")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("frame_xpath")));
    
  • 通过帧ID切换:

    driver.switchTo().frame("frame_name");
    
    driver.switchTo().frame("frame_id");
    
    driver.switchTo().frame(1);
    
    driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@attribute='value']")));
    
    driver.switchTo().parentFrame();
    
    driver.switchTo().defaultContent();
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.name("frame_name")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("frame_id")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("frame_cssSelector")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("frame_xpath")));
    
  • 通过帧索引切换:

    driver.switchTo().frame("frame_name");
    
    driver.switchTo().frame("frame_id");
    
    driver.switchTo().frame(1);
    
    driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@attribute='value']")));
    
    driver.switchTo().parentFrame();
    
    driver.switchTo().defaultContent();
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.name("frame_name")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("frame_id")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("frame_cssSelector")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("frame_xpath")));
    
  • 切换到WebElement

    driver.switchTo().frame("frame_name");
    
    driver.switchTo().frame("frame_id");
    
    driver.switchTo().frame(1);
    
    driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@attribute='value']")));
    
    driver.switchTo().parentFrame();
    
    driver.switchTo().defaultContent();
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.name("frame_name")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("frame_id")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("frame_cssSelector")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("frame_xpath")));
    
  • 切换到父帧:

    driver.switchTo().frame("frame_name");
    
    driver.switchTo().frame("frame_id");
    
    driver.switchTo().frame(1);
    
    driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@attribute='value']")));
    
    driver.switchTo().parentFrame();
    
    driver.switchTo().defaultContent();
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.name("frame_name")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("frame_id")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("frame_cssSelector")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("frame_xpath")));
    
  • 切换到默认内容:

    driver.switchTo().frame("frame_name");
    
    driver.switchTo().frame("frame_id");
    
    driver.switchTo().frame(1);
    
    driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@attribute='value']")));
    
    driver.switchTo().parentFrame();
    
    driver.switchTo().defaultContent();
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.name("frame_name")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("frame_id")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("frame_cssSelector")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("frame_xpath")));
    
但根据最佳实践,您应始终引导WebDriverWait以获得所需的框架,并按如下方式切换到该框架:

  • 通过帧名称切换:

    driver.switchTo().frame("frame_name");
    
    driver.switchTo().frame("frame_id");
    
    driver.switchTo().frame(1);
    
    driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@attribute='value']")));
    
    driver.switchTo().parentFrame();
    
    driver.switchTo().defaultContent();
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.name("frame_name")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("frame_id")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("frame_cssSelector")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("frame_xpath")));
    
  • 通过帧ID切换:

    driver.switchTo().frame("frame_name");
    
    driver.switchTo().frame("frame_id");
    
    driver.switchTo().frame(1);
    
    driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@attribute='value']")));
    
    driver.switchTo().parentFrame();
    
    driver.switchTo().defaultContent();
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.name("frame_name")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("frame_id")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("frame_cssSelector")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("frame_xpath")));
    
  • 通过帧CSS选择器切换:

    driver.switchTo().frame("frame_name");
    
    driver.switchTo().frame("frame_id");
    
    driver.switchTo().frame(1);
    
    driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@attribute='value']")));
    
    driver.switchTo().parentFrame();
    
    driver.switchTo().defaultContent();
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.name("frame_name")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("frame_id")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("frame_cssSelector")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("frame_xpath")));
    
  • 切换到帧xpath:

    driver.switchTo().frame("frame_name");
    
    driver.switchTo().frame("frame_id");
    
    driver.switchTo().frame(1);
    
    driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@attribute='value']")));
    
    driver.switchTo().parentFrame();
    
    driver.switchTo().defaultContent();
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.name("frame_name")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("frame_id")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("frame_cssSelector")));
    
    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("frame_xpath")));
    

使用xpath使用findelement方法查找iframe,并将元素传递给switchto方法。还可以使用索引切换到iframe。