我有多个嵌套框架,我需要访问这些框架下的元素。由于这些帧是动态的,我无法访问这些元素。
我是否可以在不使用driver.switchTo().frame()
的情况下访问元素?
喜欢直接使用xpath还是jquery,javascript或其他什么? 欢迎任何建议
答案 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
希望这有帮助。