我正在尝试将元素放入第二帧here
但是我收到了该元素不存在或
的错误消息Unable to locate element: {"method":"xpath","selector":"//frameset/frame[2]//a"}
我尝试了所有方法,但对我而言不起作用,这是我的代码
WebDriver driver = new ChromeDriver();
driver.get("https://dps.psx.com.pk/");
//switch to the mainFrame
WebElement mainFrame = driver.findElement(By.xpath("//frameset/frame[2]//a"));
driver.switchTo().frame(mainFrame);
List<WebElement> childs = mainFrame.findElements(By.xpath(".//*"));
for(WebElement child : childs) {
System.out.println(child);
}
我也尝试过等待元素加载,然后尝试访问框架内的元素,但仍然存在相同的错误。
答案 0 :(得分:1)
frame
定位符是//frameset/frame[2]
,//a
是对frame
的深入研究。
您也可以直接使用name
属性进行切换。 switchTo().frame()
可以接收id
,name
或WebElement
作为参数
driver.switchTo().frame("mainFrame");
如果框架需要花费一些时间来加载,则可以使用显式等待和ExpectedCondition
frameToBeAvailableAndSwitchToIt
WebDriverWait wait = new WebDriverWait(WebDriverRefrence,20);
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//frameset/frame[2]")));
答案 1 :(得分:0)
根据您共享的 HTML ,您必须遍历所需的frame
:
诱导 WebDriverWait 以使所需的元素可单击,您可以使用以下解决方案:
使用name
:
new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.name("mainFrame")));
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.name("element_name"))).click();
使用xpath
:
new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//frame[@name='mainFrame' and contains(@src,'index1')]")));
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("element_xpath"))).click();