2017-11-13 1 views
1

私はこの問題の解決策を数日前から探してきましたが、運があまりありませんでした。次のように私が使用していますセレンを使ってアクセスするときにPhantomJSにDOMが埋め込まれない

バージョンは次のとおりです。

-Java 8

-Selenium 3.4.0

-PhantomJS 1.9.8(持っているが、PhantomJS 2.1.1と同じ結果が得られました)

-JUnit 4.12(コードはJUnitのを介して呼び出さなっている。)

すべてがこの実行のためのWindows 10上で起こっているが、私は同様の問題がありました

私はPhantomJSでSeleniumを実行しようとしていますが、ページが完全に利用できるようになる問題にぶちかかります。以下は

は、私が問題に実行した(テスト目的のためにSystem.outsのトンで)コードスニペットです:

methodDriver.manage().window().maximize(); 

    System.out.println(methodDriver.getPageSource()); 

    WebElement trackingInbox = methodDriver.findElement(By.id("inbox-widget-container-id")); 

    WebElement inboxBody = trackingInbox.findElement(By.xpath("div[1]/div[2]/table/tbody")); 

> List<WebElement> rows = inboxBody.findElements(By.tagName("tr")); 

私は

を得る "にErrorMessage" : "IDが 'inbox-widget-container-id'の要素を見つけることができません" 行: WebElement trackingInbox = methodDriver.findElement(By.id( "inbox-widget-container-id"));

私は二行目でページのソースを印刷するときので、これらはDOMの内容ですので、これはいくつかを作る:しかし、私はクロムまたはいずれかを使用し、場合

<body id="inboxBody" style="border:none; width:99%; align:center"> 
 
\t <div id="inboxContent"> 
 
\t \t <div class="mui-panel mui-panel-header"> 
 
\t \t \t <p class="mui--text-subhead">Tracking Inbox</p> 
 
\t \t </div> 
 
\t \t <div id="inboxes_div"> 
 
\t \t \t <div id="inboxes_control_section"> 
 
\t \t \t \t <div id="inboxes_control_inboxGroup" style="float: left; padding-right: 10px;padding-left: 5px;"> 
 
\t \t \t \t \t <select id="inbox_group" name="inbox_group"></select> 
 
\t \t \t \t </div> 
 
\t \t \t \t <div id="inboxes_control_inbox" style="float: left; padding-right: 10px;"> 
 
\t \t \t \t \t <select id="inboxes" name="inboxes"></select> 
 
\t \t \t \t </div> 
 
\t \t \t </div> 
 
\t \t \t <p></p> 
 
\t \t \t <div id="inbox_content_div" style="padding-top: 5px;"></div> 
 
\t \t </div> 
 
\t \t <input type="hidden" id="inbox_content_totalRecords" value=""> 
 
\t </div> 
 
\t <br> 
 
</body>

firefox(headed)私は次のようになる:

<body id="inboxBody" style="border: none; width: 957px;"><div id="inbox-widget-container-id" class="ui-resizable" style="width: 958px; margin-left: 1px; height: 500px;"><div class="grid-widget" style="width: 955px;"><div class="heading" style="background: linear-gradient(rgb(66, 139, 202), rgb(7, 105, 173)); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom: 0px; width: 955px;"><table class="heading" style="width: 938px; table-layout: fixed;"><tbody><tr><td style="text-align: center; height: 35px; width: 90px;"><div class="btn-group no-border condensed"><span class="btn btn-primary btn-sm thin-padding no-border hover-effect sortable" data-sortable-event="click">Case�#�<i class="fa fa-sort-amount-asc fa-fw fa-opaque"> . . . 
 
\t \t \t \t \t <div id="inboxContent" style="display: none;"> 
 
\t \t \t \t <div class="mui-panel mui-panel-header"> 
 
\t \t \t \t \t <p class="mui--text-subhead">Tracking Inbox</p> 
 
\t \t \t \t </div> 
 
\t \t \t \t <div id="inboxes_div"> 
 
\t \t \t \t \t \t \t \t \t \t <div id="inboxes_control_section"> 
 
\t \t \t \t \t \t <div id="inboxes_control_inboxGroup" style="float: left; padding-right: 10px;padding-left: 5px;"> 
 
\t \t \t \t \t \t \t <select id="inbox_group" name="inbox_group"><option value="inbox.group.case">Case</option><option value="group.InvestiagtionItems">Investigation Items</option></select> 
 
\t \t \t \t \t \t </div> 
 
\t \t \t \t \t \t <div id="inboxes_control_inbox" style="float: left; padding-right: 10px;"> 
 
\t \t \t \t \t \t \t <select id="inboxes" name="inboxes"><option value="inbox.cases">Assigned</option></select> 
 
\t \t \t \t \t \t </div> 
 
\t \t \t \t \t </div> 
 
\t \t \t \t \t <p></p> 
 
\t \t \t \t \t <div id="inbox_content_div" style="padding-top: 5px;"></div> 
 
\t \t \t \t \t \t \t \t \t </div> 
 
\t \t \t \t <input type="hidden" id="inbox_content_totalRecords" value="" /> 
 
\t \t \t </div> 
 
\t \t \t \t <br /> 
 
\t 
 
</body>

最初の行が非常に長い間続いていることに注意してください(私は意図的にここを短くしています)。その行には、作業したい要素が含まれていますが、PhantomJSには表示されません。

""要素の上には、jqueryスクリプトを持つ大きな ""要素があります。私は、このスクリプトがファントムズで実行されていないという示唆を聞いたことがあります。だから、私はそれをどうやって行うのかを考え出すのに苦労しているにもかかわらず、それをファントムで動かす方法を見つける必要があるかもしれません。

答えて

0

要素を待つ必要があるようです。それ以外の場合、WebサイトはPhantomJSを許可しません。最初に待ってみましょう。下の例を見てください。

WebDriverWait wait = new WebDriverWait(methodDriver, 10); 
WebElement trackingInbox = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("inbox-widget-container-id"))); 
+0

Hmm。私はそれを試して言及してうまくやっただろう。それはもちろん、おそらくこのようなものへの答えでしょう。それが起こると、私は別のショットを待っていた。同じ結果、残念ながら。 DOMは、その中に入るべき要素を一切取得しないようです。 – somexp12

+0

私は不思議です。 PhantomJSが触れることができない特定の種類のコンテンツがあるかどうか知っていますか?このウェブサイトは私たちが自宅で開発したものなので、明示的にファントムを禁止することは何もなかったことを知っています。たぶん、サイトに使用されている技術。 – somexp12

+0

@ somexp12あなたのウェブサイトがスクラップを避けるためにHTTPヘッダーのUser-Agentをチェックする場合、PhantomJSは動作しません。 – Buaban

関連する問題