【问题标题】:Finding selenium object tag using java使用 java 查找 selenium 对象标签
【发布时间】:2016-03-22 21:32:22
【问题描述】:

我以前的代码工作没有问题,并且能够使用 selenium 在网页中找到对象标记没有问题。我正在使用 chrome 驱动程序来访问页面,因为我注意到当我使用 IE 时 DOM 内部没有显示任何内容,我需要访问对象标记的内容。也就是说,我使用的代码如下:

browser.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
WebElement object = browser.findElement(By.tagName("object"));
browser.switchTo().frame(object);

目前,我遇到了一个问题,虽然我从第二行收到错误消息:

Caused by: java.lang.ClassCastException: com.google.common.collect.Maps$TransformedEntriesMap cannot be cast to org.openqa.selenium.WebElement

我正在查看的对象标签(主要是由于删除了与业务相关的部分)如下:

<object type="image/svg+xml" data="classified" width="1600px" height="900px">...</object>

知道什么可能是错误的,或者在 java 中是否有更好的方法来做到这一点?

【问题讨论】:

  • 附注:我已经调查了大约 2 天,但没有发现任何内容,页面上只有 1 个对象标签。

标签: java google-chrome selenium


【解决方案1】:

我认为是同步问题。

我会建议你使用WebDriver Wait

您可以尝试以下代码:

WebDriver driver = new FirefoxDriver();
driver.get("http://somedomain/url_that_delays_loading");
WebElement myDynamicElement = (new WebDriverWait(driver, 10))
  .until(ExpectedConditions.presenceOfElementLocated(By.tag("object")));

【讨论】:

  • 我希望就是这样,但我得到错误:返回值无法转换为 WebElement:{}。我认为它找到了它,但由于某种原因认为它不是网络元素。
  • 您在 switchTo().frame(object); 之后尝试执行的操作; ?这个 中的 Object 是什么 是视频还是 pdf 文件?
  • 这是一个 svg-xml 或对象内部的图像,我需要获取一些标签内的一些文本字段。如果没有 switchTo,我无法直接访问它们,因为该对象的行为类似于
  • 你能添加整个项目吗?如果可以的话
  • 考虑到这是为了工作,我无法提供整个项目。我可以提供更多的 sn-ps,但唯一没有提到的是我如何连接到网页并到达我需要的网页,以及切换到对象标签后我所做的具体操作。您想要哪些更多信息/代码 sn-ps?
【解决方案2】:

在 Chromium 项目中报告了问题:

我们在内部自动化项目中遇到了这样的问题,但我们也可以选择查询 div 而不是 object(我们修复它的方式)。

我将测试改回查询object 元素,我得到了同样的异常:

Starting ChromeDriver 2.18.343837 (52eb4041461e46a6b73308ebb19e85787ced4281) on port 18276
Only local connections are allowed.
Exception in thread "main" org.openqa.selenium.WebDriverException: Returned value cannot be converted to WebElement: {}
Build info: version: '2.47.1', revision: 'unknown', time: '2015-07-30 11:02:44'
System info: host: 'xxx-MacBook-Pro-4.local', ip: 'xxx.xxx.x.xx', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.11', java.version: '1.7.0_71'
Driver info: driver.version: RemoteWebDriver
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:355)
    at org.openqa.selenium.remote.RemoteWebDriver.findElementByTagName(RemoteWebDriver.java:413)
    at org.openqa.selenium.By$ByTagName.findElement(By.java:331)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:340)
    at Main.main(Main.java:11)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Caused by: java.lang.ClassCastException: com.google.common.collect.Maps$TransformedEntriesMap cannot be cast to org.openqa.selenium.WebElement
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:353)
    ... 9 more

浏览器:Google Chrome Version 47.0.2526.106 (64-bit)
(今天的最新稳定版本 [OS X 平台])

【讨论】:

  • 我并没有真正理解第一个链接中所说的内容,但第二个提到了 chrome ver。 47 是一个问题,但不是 46 或 48,所以我想知道这是否相关,因为 chrome 驱动程序加载的 chrome 版本是 47。我必须调查一下
  • 你知道如何更改谷歌浏览器的版本(sites.google.com/a/chromium.org/chromedriver/downloads)吗?
  • 答案已更新。更改 Google Chrome 版本的方法有很多:您可以在操作系统级别创建新用户并安装特定版本的 Google Chrome,或者您可以在 selenium 中设置 Google Chrome 的路径。如果您在 SO =P 上找不到答案,请随时提出新问题
猜你喜欢
  • 1970-01-01
  • 2012-04-22
  • 1970-01-01
  • 1970-01-01
  • 2014-11-04
  • 2021-10-20
  • 2021-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多