如何找到包含的动态框架

时间:2018-12-24 10:36:44

标签: java selenium xpath iframe css-selectors

我正在尝试将我的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&amp;location=https%3A%2F%2Fyeezysupply.com%2F17655971%2Fcheckouts%2Fb5fa1aecc18e4f685d7408c699c2ac5b%3F_ga%3D2.184035750.1808724638.1545611726-2044927600.1545611726&amp;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);

我也尝试过开始-但还是没有运气。如果有我不知道的其他方法,请告诉我。

4 个答案:

答案 0 :(得分:0)

您可以尝试使用title =“字段容器用于CVV”

xpath="//iframe[@title='Field container for: CVV']"

答案 1 :(得分:0)

要切换到动态<iframe>,则必须:

  • 诱导 WebDriverWait 以使所需的框架可用并切换到它。
  • 您可以使用以下解决方案:

    • 使用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,然后再移动到此框架。

  1. 选择其他属性。例如,可能正在使用Title。希望这不会改变。
  2. 我也可以将XPATH="1"视为属性。如果没有改变,您可以简单地 说iframe[XPATH="1"]

答案 3 :(得分:0)

如果您愿意根据 SRC 值来识别Iframe

您可以使用cssSelector通配符*使用以下代码,即包含子字符串:

WebElement cVV = driver.findElement(By.cssSelector("iframe[src*='verification']"));
driver.switchTo().frame(cVV);