【问题标题】:How do I select an iframe using java selenium if it doesn't have name or id如果没有名称或 ID,如何使用 java selenium 选择 iframe
【发布时间】:2021-11-02 00:43:59
【问题描述】:

我正在尝试在 selenium java 中选择 iframe,但该元素没有 Name 或 Id 属性。我应该如何得到它? (我想用switchTo来切换)

我试图从中获取iframe 的网站是jklm.fun,而iframexpath

"/html/body/div[2]/div[4]/div[1]/iframe"

(您需要在游戏中iframe 才能存在)

【问题讨论】:

  • 事实证明根本没有问题,只是我在一个while循环中运行它,所以它会切换到iframe,然后继续尝试在该iframe中找到一个iframe,从而给了我错误

标签: java html selenium iframe


【解决方案1】:

根据树的位置选择任何内容的方法相同:常规 CSS 选择器。你查询-选择body div div div iframe,你几乎肯定会得到它(除非你有很多带有iframe的三深div,在这种情况下,那个网页上到底发生了什么=),但如果那仍然为您提供多种选择,使用战术:nth-child(...) 伪类缩小查询选择器。

【讨论】:

  • 我如何在 selenium 中使用 switchTo?
  • 通过应用标准逻辑?获取页面上所有框架的列表,以及你需要的一个框架,然后driver.switchTo().frame(allFrames.indexOf(myFrame))
  • 我会努力做到的
【解决方案2】:

我不建议使用绝对 xpath:

/html/body/div[2]/div[4]/div[1]/iframe

相当有一个相对的 xpath。

话虽如此,就切换而言,有多种方式:

  1. 使用driver.switchTo()

这基本上提供了3个重载方法:-

带索引:-

driver.switchTo().frame(index)

姓名或ID:-

driver.switchTo().frame(nameOrId)

带有网页元素

driver.switchTo().frame(frameElement)

所以在这 3 个中,我们可以轻松使用其中的 2 个,因为 id 或 name 在您的情况下不可用。

使用索引:

driver.switchTo().frame("here pass the index if you know. ")

使用框架网页元素:

driver.switchTo().frame(driver.findElement(By.xpath("/html/body/div[2]/div[4]/div[1]/iframe")))

这应该适合你。

  1. 我们的另一种方法是显式等待:

    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("/html/body/div[2]/div[4]/div[1]/iframe")));
    

这个比较方便,可以在angular或者react based Application.切换到iframe

【讨论】:

  • 我认为页面上只有 1 个 iframe,但是由于某种原因将索引传递为 0 不起作用。如果我执行 driver.findElement(By.tagName("iframe") 它可以工作,但是当我将它放入 .frame() 时它也不起作用。
  • 您的尝试索引也为 1 吗?当您说 by.tagName 有效时,这也很清楚。因为这将是我上面描述的第三种情况的例子。
  • 我也尝试了索引 1,但没有成功。当我做了 driver.switchTo().frame(driver.findElement(By.tagName("iframe") 它仍然没有工作它给我“没有这样的元素:无法找到元素:{“方法”:“css选择器","selector":"iframe"}"
  • 尝试显式等待,应该足以处理所有这些情况。
  • 我在 while 循环中运行 switchTo,所以它只是不断尝试切换
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-13
相关资源
最近更新 更多