2017-02-09 11 views
0

テストサーバーから電子メールを収集する電子メールのCustomer.ioアカウントを持っています。 要素が必要なiframeがあります。しかし、私はそれらに行くことはできません。私が使用している場合:Customer.ioのiframeにある要素にアクセスできない

page.in_iframe(xpath: "//iframe[contains(@class, 'ember-view')]") do |frame| 
    page.cell_element(xpath: "//td[contains(text(), 'Order Confirmation')]", frame: frame).when_present(30) 
end 

その後、私は次のエラーを取得:

SyntaxError: (eval):1: syntax error, unexpected tIDENTIFIER, expecting ')' 
.../iframe[contains(@class, 'ember-view')]').td(identifier) 
...        ^
(eval):1: syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '(' 
...e[contains(@class, 'ember-view')]').td(identifier) 
...        ^
(eval):1: syntax error, unexpected ')', expecting end-of-input 
...ntains(@class, 'ember-view')]').td(identifier) 
... 

をそして、私はこれを使用する場合:

page.in_iframe(xpath: "//iframe[contains(@class, ember)]") do |frame| 
    page.cell_element(xpath: "//td[contains(text(), 'Order Confirmation')]", frame: frame).when_present(30) 
end 

をそれから私は、このエラーを得ることはありませんが、要素ができませんでした見つけられた。

答えて

0

問題はiframe XPath文字列の解析にあるようです。インタプリタが問題を抱えている理由私は理解していないが、ここでいくつかの解決策は以下のとおりです。

最初の例では、文字列の外側の一部として単一引用符を使用するように切り替える:

page.in_iframe(xpath: '//iframe[contains(@class, "ember-view")]') do |frame| 
    page.cell_element(xpath: "//td[contains(text(), 'Order Confirmation')]", frame: frame).when_present(30) 
end 

第二の例について属性値を引用する必要があります。あなたは文字列のための二重引用符に固執する場合は、内側の二重引用符をエスケープすることができます

page.in_iframe(xpath: "//iframe[contains(@class, \"ember\")]") do |frame| 
    page.cell_element(xpath: "//td[contains(text(), 'Order Confirmation')]", frame: frame).when_present(30) 
end 

代わりに、あなたは他のロケータを使用したXPathの問題を回避することを検討してください:

page.in_iframe(class: 'ember-view') do |frame| 
    page.cell_element(text: /Order Confirmation/, frame: frame).when_present(30) 
end 
0

は、私は別の方法を見つけた:

@browser.iframe(xpath: "//iframe[contains(@class,'ember')]").td(xpath: "//td[contains(text(), 'Order Confirmation')]") 

その例が動作するようにしたくないので。理由を知らない。

感謝Justin:

1

Watirの目標の1つは、XPathを使用する必要がないことです。

は、このような正規表現を使用してロケータを書き換える考えてみましょう:

@browser.iframe(class: /ember/).td(text: /Order Confirmation/) 
+0

おかげで、私の例では、動作します。そしてあなたも働いています。 –

+0

私はあなたのことがうまくいかないと言っているわけではありません、WatirでXPathを使用するのは一般的には良い方法ではありません。 – titusfortner

関連する問題