当我访问我的 iframe 时,当我使用 selenium 时,#document 不显示
Posted
技术标签:
【中文标题】当我访问我的 iframe 时,当我使用 selenium 时,#document 不显示【英文标题】:When i acces my Iframe the #document doesnt show when i use selenium 【发布时间】: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&element=controller&instanceId=200803&referrer=https://stage-secure-gateway.hipay-tpp.com" frameborder="0" allowtransparency="true" scrolling="no" 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()
,但它始终不起作用
【问题讨论】:
【参考方案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
,这超出了本问题的范围。以上是关于当我访问我的 iframe 时,当我使用 selenium 时,#document 不显示的主要内容,如果未能解决你的问题,请参考以下文章