如何使用Selenium和Java在多帧之间切换?

问题描述 投票:0回答:1

我想将密钥发送到iframe中的Card Number、Expiration Date和CVV文本字段。

现在我观察到的是,当在测试用例中,我先写的哪个帧切换被定位,钥匙就被发送,而其他两个帧被忽略。

在下面的代码中,我首先提到了到期日框架,它被找到了,但是卡片框架即cddnumber id框架没有被找到。

cpp.fillintextfields.get(4).sendKeys("[email protected]");
WebElement es = driver1.findElement(By.id("CollectJSInlineccexp"));
driver1.switchTo().frame(es);
cpp.expdate.sendKeys("01/21");
driver1.switchTo().frame("CollectJSInlineccnumber");
Thread.sleep(2000);
cpp.cdnumber.sendKeys("4111111111111111");
Thread.sleep(5000);

现在当我在下面的代码中先提到cddnumber即卡号框,然后再提到到期日框时,卡号框被找到了,而到期日框却没有被找到。

cpp.fillintextfields.get(4).sendKeys("[email protected]");
driver1.switchTo().frame("CollectJSInlineccnumber");
Thread.sleep(2000);
cpp.cdnumber.sendKeys("4111111111111111");
Thread.sleep(5000);
WebElement es = driver1.findElement(By.id("CollectJSInlineccexp"));
driver1.switchTo().frame(es);
cpp.expdate.sendKeys("01/21");

以下是TestNG在卡号框之前提到到期日框时的错误痕迹。

org.openqa.selenium.NoSuchFrameException: No frame element found by name or id CollectJSInlineccnumber
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'KE5', ip: '10.6.6.105', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '10.0.2'
Driver info: driver.version: unknown
    at org.openqa.selenium.remote.RemoteWebDriver$RemoteTargetLocator.frame(RemoteWebDriver.java:885)

请帮助我,给我建议解决这个问题的方法,使所有的框架都能被定位,即使我一个接一个地写。

java selenium selenium-webdriver iframe frame
1个回答
0
投票

当你需要切换两个 子帧 一样 母帧 (例如 顶层框架),你需要切换到 defaultContent 是页面上的第一个框架,或者当页面包含iframe时是主文档,然后切换到第二个 子帧 如下。

  • 第一个代码块。

    cpp.fillintextfields.get(4).sendKeys("[email protected]");
    WebElement es = driver1.findElement(By.id("CollectJSInlineccexp"));
    driver1.switchTo().frame(es);
    cpp.expdate.sendKeys("01/21");
    driver1.switchTo().defaultContent();
    Thread.sleep(2000);
    driver1.switchTo().frame("CollectJSInlineccnumber");
    Thread.sleep(2000);
    cpp.cdnumber.sendKeys("4111111111111111");
    
  • 第二个代码块。

    cpp.fillintextfields.get(4).sendKeys("[email protected]");
    driver1.switchTo().frame("CollectJSInlineccnumber");
    Thread.sleep(2000);
    cpp.cdnumber.sendKeys("4111111111111111");
    Thread.sleep(5000);
    driver1.switchTo().defaultContent();
    WebElement es = driver1.findElement(By.id("CollectJSInlineccexp"));
    driver1.switchTo().frame(es);
    cpp.expdate.sendKeys("01/21");
    

参考文献

你可以在以下几个相关讨论中找到。

© www.soinside.com 2019 - 2024. All rights reserved.