硒无法找到iframe

时间:2019-02-07 15:00:10

标签: java selenium iframe css-selectors webdriverwait

Selenium无法通过IDName定位iframe。

这是Shopify上的自动结帐测试。具体问题在付款字段内。我找到了iframe的ID和名称,即card-fields-number-b1kh6njydiv00000

iframe图片:

iframe Image

文本字段图像:

Text Field Image

代码试用:

driver.switchTo().frame("card-fields-number-b1kh6njydiv00000");
System.out.println("Found iframe");

错误是:

org.openqa.selenium.NoSuchFrameException: No frame element found by name or id card-fields-number-b1kh6njydiv00000

5 个答案:

答案 0 :(得分:1)

我相信可以为此使用XPath。您将需要使用XPath查找IFrame IWebElement,然后将IWebElement传递到SwitchTo()。Frame()

var ele = driver.FindElement(By.XPath("//iframe[contains(id, 'card-fields-number')]"));

driver.switchTo().frame(ele);

答案 1 :(得分:0)

您是否尝试使用driver.switchTo()。defaultContent();在switchTo.frame之前?

也许您还没有画完所有画框

driver.switchTo().defaultContent();
driver.switchTo().frame("card-fields-number-b1kh6njydiv00000");
System.out.println("Found iframe");

答案 2 :(得分:0)

我猜每次框架名称或ID都是动态的,在这种情况下,请使用索引来标识框架。

int size = driver.findElements(By.tagName("iframe")).size();
  for(int i=0; i<=size; i++){
    driver.switchTo().frame(i); 
    //Do necessary operation here.
    driver.switchTo().defaultContent();
   }

希望这会有所帮助

答案 3 :(得分:0)

根据您共享的图像<iframe>具有动态属性,因此必须定位并切换到所需的<iframe>

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

    • cssSelector

      new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("iframe.card-fields-iframe[id^='card-fields-number-'][src*='shopifycs']")));
      
    • xpath

      new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//iframe[@class='card-fields-iframe' and starts-with(@id,'card-fields-number-')][contains(@src, 'shopifycs')]")));
      
  

在这里您可以找到有关Ways to deal with #document under iframe的相关讨论

答案 4 :(得分:0)

我的解决方案是寻找与不同动态ID完全相同的关键字。在这种情况下,它是“ card-fields-name”。我是通过使用XPath定位器来做到这一点的。

driver.switchTo().frame(driver.findElement(By.xpath("//iframe[contains(@id,'card-fields-number')]")));