Fab*_*llo 4 html iframe cucumber stripe-payments selenium-webdriver
我有一个要在Java中使用Cucumber和Selenium Webdriver自动化的表单-在此表单中,我们有一个从Stripe使用的card元素。我们称为div,其余部分由Stripe完成。我不确定这是否是iFrame,但是当我使用
Hooks.driver.findElement(By.xpath("xpathOfTheCardNumberField")).sendKeys("123");
Run Code Online (Sandbox Code Playgroud)
命令,它将不与之交互,并在控制台日志中返回“无法定位元素”错误。
我已经要求我们的前端程序尝试在字段中添加一些ID或名称标签,但是他告诉我,他不能与card元素内部的字段的标记进行交互,只能与card元素本身进行交互-作为Stripe Deal与其他一切。
随附的是卡片元素的图片,以及相关卡片元素的标记。
是否可以让Selenium与该元素进行交互?
任何帮助是极大的赞赏。卡元素前端
小智 5
为确保完整性,对Fabio接受的答案进行了其他后续跟踪。
self.browser = webdriver.Chrome()
# fill in the other fields as usual (i.e. self.browser.find_element_by_id(...))
# When you arrive at the iframe for the card number, exp. date, CVC, and zip:
self.browser.switch_to.frame(frame_reference=self.browser.find_element(By.XPATH, '//iframe[@name="__privateStripeFrame3"]'))
# This switches to the iframe, which Selenium can now start selecting elements from.
# The remaining form elements can be found by name
self.browser.find_element_by_name('cardnumber').send_keys('4242 4242 4242 4242')
# And find the other elements the same way as above (exp-date, cvc, postal).
# Finally, switch back to the default content to select the submit button
self.browser.switch_to.default_content()
self.browser.find_element_by_tag_name('button').click()
Run Code Online (Sandbox Code Playgroud)
实际上我自己已经解决了这个问题,所以我将回答这个问题并关闭它,以防其他人遇到问题。
我认为这是一个可以用于任何 iframe 的总方法,而不仅仅是 Stripe。
首先,您必须告诉您的网络驱动程序将框架切换到您尝试访问的 iframe:
Hooks.driver.switchTo().frame(Hooks.driver.findElement(By.xpath("xpathOfIframe")));
Run Code Online (Sandbox Code Playgroud)
然后,您可以为该 iframe 中的内容创建 webElements,并与它们交互:
WebElement creditcardNumber = Hooks.driver.findElement(By.name("cardnumber"));
creditcardNumber.sendKeys("1234567890000066");
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1694 次 |
最近记录: |