【问题标题】:How to find a dynamic frame with contains如何找到包含包含的动态框架
【发布时间】:2019-05-23 13:08:54
【问题描述】:

我正在尝试将我的 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 有效,但对这个无效。

WebElement cVV = driver.findElement(By.xpath("//iframe[contains(@src,'verification')]"));
        driver.switchTo().frame(cVV);

我也尝试了starts-with,但仍然没有运气。如果有其他我不知道的方法,请告诉我。

【问题讨论】:

  • 还想补充一点,我用不同的 src 尝试过,比如“checkout.shopifycs.com/verification_value”,Id 像“card-fields-verification_value”。
  • 您对start-with 进行了哪些尝试?因为//iframe[starts-with(@id,'card-fields-verification_value')] 应该可以工作。
  • @NafRahman 请不要根据您收到的经过充分研究的答案编辑 HTML。一旦您收到规范答案,更改问题可能会使所有答案无效,并且可能对未来的读者没有用处。如果您的要求发生了变化,请随时提出一个新问题。 StackOverflow 贡献者将很乐意为您提供帮助。目前我已将问题恢复到初始状态。

标签: java selenium xpath iframe css-selectors


【解决方案1】:

您可以尝试使用 title="Field container for: CVV"

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

【讨论】:

  • 提供更多的html代码,如果这个框架包含在另一个框架中?这个定位器很好。我测试了
【解决方案2】:

要切换到动态&lt;iframe&gt;,您必须:

  • 诱导 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的相关讨论

【讨论】:

    【解决方案3】:

    如果提供的 HTML 源是原样,我会建议一些事情。

    如果您是从父页面直接切换到此框架,可以尝试替代属性。否则,请确保先切换到 DefaultContent,然后再移动到此框架。

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

    【讨论】:

      【解决方案4】:

      如果您一心想根据 SRC 值识别Iframe

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

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

      【讨论】:

        猜你喜欢
        • 2011-03-28
        • 1970-01-01
        • 1970-01-01
        • 2012-04-02
        • 1970-01-01
        • 1970-01-01
        • 2013-09-04
        • 2019-09-18
        • 1970-01-01
        相关资源
        最近更新 更多