猿问

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

我想获得第二个框架内的元素在这里


但我收到该元素不存在或


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

}

我也试过等待元素加载,然后尝试访问框架内的元素,但仍然出现相同的错误。


哔哔one
浏览 146回答 2
2回答

一只斗牛犬

该frame定位是//frameset/frame[2],将//a是一个向下钻取frame。也可以name直接使用属性进行切换。switchTo().frame()可以接收id,name或者WebElement作为参数driver.switchTo().frame("mainFrame");如果框架需要时间加载,您可以使用显式等待和ExpectedCondition&nbsp;frameToBeAvailableAndSwitchToItWebDriverWait&nbsp;wait&nbsp;=&nbsp;new&nbsp;WebDriverWait(WebDriverRefrence,20);wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//frameset/frame[2]")));

慕虎7371278

根据您共享的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();
随时随地看视频慕课网APP

相关分类

Java
我要回答