2015-09-07 60 views
0

我在內容爲var x ='test';的頁面上有腳本標記。如果我查看頁面源,則內容肯定存在。如何使用水豚檢測<script>標記的存在

但是我不能得到水豚認識到這一點。 我已經試過:這些工作

expect(page).to have_content("<script>var x = 'test';</script>") 

expect(page).to have_content("var x = 'test';") 

expect(page).to have_content("<script>") 

find(:xpath, "//script") 

沒有,我的想法......

+0

嘗試'expect(Capybara.string(response.body).gsub('\\','').html_safe).to have_text(「var x ='test';」)' – Surya

+0

這給出: '未定義的方法正文爲零:NilClass' – Riina

回答

0

嘗試下面的代碼 -

script標籤與src屬性與包括.js文件。

all('script').find { |s| s[:src].match /.js$/ }.should_not be_nil 

script標籤與內部HTML JavaScript代碼,

all('script').find { |s| s[:src].nil? }.count.should_not be(0) 
+0

這不起作用。 'expect:not nil got:nil' 仍然表示儘管頁面上有十多個我可以看到的頁面上沒有腳本標記。 – Riina

+0

現在嘗試,我已經添加了第二種情況,您嘗試使用內部html代碼存在。嘗試第二個示例,檢查腳本標記是否存在,而不是鏈接到外部JavaScript文件。 –

+0

'NoMethodError: 未定義的方法計數爲零:NilClass' 該查找仍然返回零恐怕.. – Riina

0

have_content(及其別名have_text)是用於檢查元素的文本內容,而不是用於檢查在頁面元素。你想要使用have_selector。如果您正在檢查在頁面至少一個腳本元素將是

expect(page).to have_selector(:css, 'script', visible: false, minimum: 1) 

如果檢查只有一個腳本元素,你可以做

expect(page).to have_selector(:css, 'script', visible: false, count: 1) 

很明顯,你可以調整計數/最小號碼,或者使用最大值或兩者之間的選項。可見性:false選項很重要,因爲腳本元素在頁面上不可見,因此在沒有它的情況下不會找到它。