如何使用 Selenium 和 Java 在多个帧之间切换
How to switch between multiple frames using Selenium and Java
我想将密钥发送到 iframe 中的卡号、到期日期和 CVV 文本字段。
现在我观察到的是,在测试用例中,我首先写入开关的帧被定位并且发送了键,而其他两个被忽略。
在下面的代码中,我首先提到了到期日期框架,但找不到卡框架,即 cddnumber id 框架。
cpp.fillintextfields.get(4).sendKeys("test@test.com");
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("test@test.com");
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)
请帮助我并建议我解决此问题的任何解决方案,以便即使我一个接一个地写它们也可以找到所有框架。
当您需要在相同 的两个 子框架 之间切换时(例如 顶级框架 ),您需要切换到 defaultContent
页面上的第一个框架,或者页面包含 iframe 时的主文档,然后切换到第二个 child frame如下:
第一个代码块:
cpp.fillintextfields.get(4).sendKeys("test@test.com");
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("test@test.com");
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");
参考资料
您可以在以下位置找到一些相关讨论:
我想将密钥发送到 iframe 中的卡号、到期日期和 CVV 文本字段。
现在我观察到的是,在测试用例中,我首先写入开关的帧被定位并且发送了键,而其他两个被忽略。
在下面的代码中,我首先提到了到期日期框架,但找不到卡框架,即 cddnumber id 框架。
cpp.fillintextfields.get(4).sendKeys("test@test.com");
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("test@test.com");
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)
请帮助我并建议我解决此问题的任何解决方案,以便即使我一个接一个地写它们也可以找到所有框架。
当您需要在相同 defaultContent
页面上的第一个框架,或者页面包含 iframe 时的主文档,然后切换到第二个 child frame如下:
第一个代码块:
cpp.fillintextfields.get(4).sendKeys("test@test.com"); 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("test@test.com"); 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");
参考资料
您可以在以下位置找到一些相关讨论: