我想通过使用硒检查网页上是否存在框架,该怎么办

时间:2018-09-11 10:18:02

标签: java selenium-webdriver frame

登录到我的应用程序后,有时会打开一个框架,这需要单击“确定”按钮。 因此,我编写了下面的代码,该代码切换到框架,单击“确定”按钮,然后再次切换为默认代码。

driver.switchTo().frame(driver.findElement(By.id("InlineDialog_Iframe")));
driver.findElement(By.id(prop.getProperty("pending_email_close_btn_id"))).click();
driver.switchTo().defaultContent();

但是,如果没有出现框架,则代码会提示错误,指出该框架不存在。

请让我知道如何使用'if'循环或任何其他方法检查框架是否存在?

谢谢。

2 个答案:

答案 0 :(得分:0)

嗨,在过去,我也不得不做一些关于iframe的事情,这也让我很困惑,

因此,您首先需要了解的是iframe实际上是“在其他网页内”的网页,因此您需要switchTo().frame(...stuff..)才能执行某项操作

比起完成时,您需要获得初始帧driver.switchTo().defaultContent();,这样您才能从一页移动到另一页

关于在iframe中找到您要查找的元素,我建议您找到所有将始终存在的元素并尝试一下

我还建议您创建一个类,该类将保存您的代码并等待JS,Angular,Jquery ...

我的代码示例

try {
    driver.switchTo().frame(driver.findElement(By.cssSelector("iframe[id^='xdm_default']")));//change focus to iframe
    wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.tagName("html"))));//wait for html in the iframe
    WebElement divCardsGrid = wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.cssSelector("div[class^='CardsGrid']"))));

    if (!divCardsGrid.findElements(By.tagName("a")).isEmpty()) {//check for external links

} catch (WebDriverException e) {
    log.error(e.getMessage());
}


//change the focus to the initial frame
driver.switchTo().defaultContent();

我希望对您有帮助

答案 1 :(得分:0)

import { Component } from '@angular/core';
import { MylibModule } from '@somename/mylib'

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  public myLibFontSize: number;

  constructor() {
    this.myLibFontSize = 12; // will trigger ngOnChanges on myLib
  }

  onSpecificEvent() {
    // do stuff
    this.myLibFontSize = 20; // will also trigger ngOnChanges on myLib
  }
 
  onFontSizeChange(newFontSize: number) {
    // this method is optionnal.
    // with '[(inputFontSize)]="myLibFontSize"' in the HTML, the value of 'myLibFontSize' will already be updated automatically.
    // this function is only useful if the parent wants to do specific work when the value changes.
    // so there is absolutely no need to do "this.myLibFontSize = newFontSize" here.
    // the only thing to know, is that you have no clue of either 'myLibFontSize' will be updated after of before 'onFontSizeChange' is called.
    // So always use 'newFontSize' in this method, to be sure of the value used.
    console.log('myLibFontSize value changed !', newFontSize);
  }

}