我正在尝试将我的iframe切换到ID每次更改的iframe。源代码在这里:
<iframe class="card-fields-iframe ui-droppable" frameborder="0" id="card-fields-verification_value-f9yavo67out00000" name="card-fields-verification_value-f9yavo67out00000" scrolling="no" src="https://checkout.shopifycs.com/verification_value?identifier=b5fa1aecc18e4f685d7408c699c2ac5b&location=https%3A%2F%2Fyeezysupply.com%2F17655971%2Fcheckouts%2Fb5fa1aecc18e4f685d7408c699c2ac5b%3F_ga%3D2.184035750.1808724638.1545611726-2044927600.1545611726&dir=ltr" title="Field container for: CVV" style="height: 42px;" xpath="1"></iframe>
这是我尝试过的。这在其他iframe上有效,但在此iframe上无效。
WebElement cVV = driver.findElement(By.xpath("//iframe[contains(@src,'verification')]"));
driver.switchTo().frame(cVV);
我也尝试过开始-但还是没有运气。如果有我不知道的其他方法,请告诉我。
答案 0 :(得分:0)
您可以尝试使用title =“字段容器用于CVV”
xpath="//iframe[@title='Field container for: CVV']"
答案 1 :(得分:0)
要切换到动态<iframe>
,则必须:
您可以使用以下解决方案:
使用CSS_SELECTOR
:
new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("iframe.card-fields-iframe.ui-droppable[name^='card-fields-verification_value-'][src^='https://checkout.shopifycs.com/verification_value?identifier=']")));
使用XPATH
:
new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//iframe[@class='card-fields-iframe ui-droppable' and starts-with(@name, 'card-fields-verification_value-')][contains(@src, 'https://checkout.shopifycs.com/verification_value?identifier=')]")));
在这里您可以找到有关Ways to deal with #document under iframe的相关讨论
答案 2 :(得分:0)
如果提供的HTML Source是原样,那么我建议的内容很少。
如果直接从父页面切换到此框架,则可以尝试使用其他属性。否则,请确保先切换到DefaultContent,然后再移动到此框架。
Title
。希望这不会改变。XPATH="1"
视为属性。如果没有改变,您可以简单地
说iframe[XPATH="1"]
答案 3 :(得分:0)
如果您愿意根据 SRC 值来识别Iframe
:
您可以使用cssSelector
通配符*
使用以下代码,即包含子字符串:
WebElement cVV = driver.findElement(By.cssSelector("iframe[src*='verification']"));
driver.switchTo().frame(cVV);