【问题标题】:When i acces my Iframe the #document doesnt show when i use selenium当我访问我的 iframe 时,当我使用 selenium 时,#document 不显示
【发布时间】:2021-12-24 19:02:40
【问题描述】:

我正在尝试使用 selenium 中的虚拟数据通过信用卡付款。 我遇到的问题是,当我手动运行我的 selenium 代码时,#document 不显示,它只在我刷新页面后显示,但是当我尝试在 selenium 中做同样的事情时,即使页面刷新了#文档不显示。

由 selenium 完成的 HTML:

<body class="script-body">
<div class="container"></div>
<script type="text/javascript"></script>
<iframe src="https://libs.hipay.com/hostedfields/index.html#type=card&amp;element=controller&amp;instanceId=200803&amp;referrer=https://stage-secure-gateway.hipay-tpp.com" frameborder="0" allowtransparency="true" scrolling="no" width="0" height="0" name="hipay-controller-200803" title="hipay-controller-200803" id="hipay-controller-200803" data-hipay-id="hostedfield-iframe"></iframe>
</body>

当我手动操作时:

我的代码:

WebElement ClkPaiementByCard = driver.findElement(By.id("payed-cart"));
js.executeScript("arguments[0].click();", ClkPaiementByCard);
driver.findElement(By.className("script-body")).sendKeys(Keys.F5);
WebElement CardNumber = driver.findElement(By.xpath(
        "//div[@id=\"root\"]/div/div/form/div/div/input[@name=\"cardnumber\"]"));
CardNumber.clear();
CardNumber.sendKeys("4111 1111 1111 1111");
WebElement ExpDate = driver.findElement(By.xpath(
        "//div[@id=\"root\"]/div/div/input[@name=\"cc-exp\"]"));
ExpDate.clear();
ExpDate.sendKeys("05/24");
WebElement CVC = driver.findElement(By.xpath(
        "//div[@id=\"root\"]/div/div/input[@name=\"cvc\"]"));
CVC.clear();
CVC.sendKeys("123");            
WebElement SubmitPaiement = driver.findElement(By.id("submit-button"));
js.executeScript("arguments[0].click();", SubmitPaiement);

我尝试执行switchto().frame(),但它始终不起作用

【问题讨论】:

    标签: java selenium xpath iframe webdriverwait


    【解决方案1】:

    iframe 清晰可见。您需要先切换到iframe 才能访问元素,如下所示:

    driver.switchTo().frame(driver.findElement(By.xpath("//iframe[starts-with(@id, 'hipay-controller') and @data-hipay-id='hostedfield-iframe']")));
    

    最好使用WebDriverWait,如下:

    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//iframe[starts-with(@id, 'hipay-controller') and @data-hipay-id='hostedfield-iframe']")));
    

    【讨论】:

    • 对不起,我的主要问题是我不明白这个开关会做什么,如果你能解释它是否会访问#document,即使它没有在 HTML 中显示?
    • 我得到这个错误 org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//div[@id= “root”]/div/div/form/div/div/input[@name="cardnumber"]"} 并且当我将 xpath 放在元素控制台中时,它找不到,因为一旦我刷新 #document 就没有显示它显示
    • 当您尝试与iframe 中的元素进行交互时,org.openqa.selenium.NoSuchElementException 听起来像是一个新错误。您可能想提出一个包含所有相关细节的新问题。
    • 正如我在这个问题中所说的,这个错误的原因是当你第一次访问页面时 #document 不存在,所以即使他切换到框架中,他也没有什么可以选择的因为那里什么都没有,所以我提出的最后一个问题已关闭,所有相关问题都没有针对我的问题的答案。
    • 重新阅读您对此讨论的问题和我的回答。如果#document 不存在driver.switchTo().frame() 将不会成功。有一些方法可以对抗 org.openqa.selenium.NoSuchElementException,这超出了本问题的范围。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 2020-03-22
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多