2016-12-05 5 views
4
<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に以下のコードを使用していたとき、私はCSSセレクタを経由して要素を見つけることができないんだが動作しません。要素はiframeの内側にあります。PhantomJs swithToFrameは

一方、私はこの要素を同じコードの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を含む正常にロードされるように見える、スクリーンショットが考え何らかの理由でトリミングされています。あなたは試したことがあり

+1

@Igor更新された質問。入力ミスが修正されました。実際にこのマークアップはGoogleによって生成されたコピー貼り付けマークアップでした。それは注文のGoogleウォレットのテーブルです – user12384512

+1

http://stackoverflow.com/questions/24247490/find-elements-inside-forms-and-iframe-using-java-and-selenium-webdriver –

+1

@ user12384512私はあなたの問題を再現できません。 selenium-server-standalone-3.0.1'とWindows用のphantomjs 2.1.1です。ページの読み込み後にjQueryでページを動的にロードするBy.cssSelector( "table.b3id-widget-table.b3-widget-table") 'を使用して' iframe'を取得し、いくつかのjavascriptを実行してiframeボディカラーです。あなたの望むなら私はあなたのコードに基づいて私の例を提供することができます。 –

答えて

1

...

driver.FindElement(By.Name("standalone-container-main-widgetIframe")); 
string frameHTML = driver.SwitchTo().Frame("standalone-container-main-widgetIframe").PageSource; 
doc.LoadHtml(frameHTML); 

だから、あなたが同様にあなたのフレームのhtmlを見ることができるこの方法。このためにもhtmlagilitypackを使用する必要があります。

+0

これはあなたのために機能しましたか?もしそうなら、答えを受け入れてください。 –