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

问题描述 投票:1回答:2

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

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

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

java selenium selenium-webdriver frames webdriverwait
2个回答
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")));
  • 切换到框架cssSelector: new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("frame_cssSelector")));
  • 切换到框架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);

希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.