为了账号安全,请及时绑定邮箱和手机立即绑定

无法使用 Web 驱动程序 java 遍历框架

无法使用 Web 驱动程序 java 遍历框架

哔哔one 2021-12-01 15:55:30
我想获得第二个框架内的元素在这里但我收到该元素不存在或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 mainFrameWebElement 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);}我也试过等待元素加载,然后尝试访问框架内的元素,但仍然出现相同的错误。
查看完整描述

2 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

frame定位是//frameset/frame[2],将//a是一个向下钻取frame

也可以name直接使用属性进行切换。switchTo().frame()可以接收idname或者WebElement作为参数

driver.switchTo().frame("mainFrame");

如果框架需要时间加载,您可以使用显式等待和ExpectedCondition frameToBeAvailableAndSwitchToIt

WebDriverWait wait = new WebDriverWait(WebDriverRefrence,20);wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//frameset/frame[2]")));



查看完整回答
反对 回复 2021-12-01
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

根据您共享的HTML以遍历所需的内容,frame您必须:


Induce WebDriverWait等待所需的框架可用并切换到它。

Induce 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();



查看完整回答
反对 回复 2021-12-01
  • 2 回答
  • 0 关注
  • 145 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信