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

时间:2017-11-24 06:29:29

标签: java selenium selenium-webdriver frames webdriverwait

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

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

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

2 个答案:

答案 0 :(得分:2)

简单来说,

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

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

  • 切换框架名称

    driver.switchTo().frame("frame_name");
    
  • 切换相框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 ,并按以下方式切换到

  • 切换框架名称

    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.name("frame_name")));
    
  • 切换相框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")));
    

答案 1 :(得分:0)

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

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

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

(或)

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

(或)

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

driver.switchTo.frame(i);

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

Compare-Object

希望这有帮助。