【发布时间】:2017-04-20 04:46:26
【问题描述】:
<dependency>
<groupId>com.github.detro</groupId>
<artifactId>phantomjsdriver</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-support</artifactId>
<version>3.0.1</version>
</dependency>
当我将下面的代码与 phantomjsdriver 一起使用时,在切换到 Frame 后,我无法通过 css 选择器找到元素 - table.b3id-widget-table.b3-widget-table。该元素位于 iframe 内。
同时,我可以使用具有相同代码的 Firefox 或 Chrome 二进制文件找到此元素。似乎在切换到框架后,phantomjs 无法在 iframe 中找到任何元素。有什么线索吗?
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("standalone-container-main-widgetIframe")));
driver.switchTo().frame("standalone-container-main-widgetIframe");
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("table.b3id-widget-table.b3-widget-table")));
另一个答案建议添加以下选项,以防 iframe 位于另一个来源。
String [] phantomJsArgs = {"--ignore-ssl-errors=true", "--ssl-protocol=any", "--web-security=false"};
dCaps.setCapability(PhantomJSDriverService.PHANTOMJS_GHOSTDRIVER_CLI_ARGS, phantomJsArgs);
dCaps.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, phantomJsArgs);
但这对我没有帮助。最奇怪的是有时它会工作几次,不知何故从 50 次尝试中 1 次。我更改了不同的超时、隐式等待、显式等待 - 没有任何帮助,甚至等待 3-4 分钟。似乎不是时间问题。我还注意到我的 iframe 没有 src 属性,也许这就是问题
<iframe frameborder="0" src="about:blank" id="standalone-container-main-widgetIframe">
我还使用 PhantomJs 截取了屏幕截图,看起来页面已成功加载,包括嵌套的 iframe,由于某种原因,屏幕截图被修剪了。
【问题讨论】:
-
@Igor 更新了问题。修正错字。是复制粘贴标记,实际上这个标记是由谷歌生成的。这是带有订单的 Google 电子钱包表格
-
@user12384512 我无法在 Windows 上使用
selenium-server-standalone-3.0.1和phantomjs 2.1.1重现您的问题。我得到iframe和By.cssSelector("table.b3id-widget-table.b3-widget-table"),它在页面加载后使用jQuery 动态加载页面,我什至可以执行一些javascript 并更改iframe正文颜色。如果您愿意,我可以提供我的示例(基于您的代码)。 -
@ChristosLytras 我认为我们的代码非常相似。我没有尝试在沙盒中重现它。最终我不得不使用 FF 二进制文件而不是 PhantomJs。如果您只有 Google Wallet Merchat 帐户,您可以尝试自己解析相同的页面。也许您的标记和 Google 标记之间的区别在于 Google 使用 javascript 在 iframe 中动态添加元素。
标签: java selenium-webdriver phantomjs