我以前让我的代码没有问题,并且能够使用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中有更好的方法吗?
答案 0 :(得分: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平台]的最新稳定版本)
答案 1 :(得分: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")));