2017-07-28 65 views
-1

我想測試一個簡單的方案,但xpath似乎並不可用,一旦我成功,但在同一個xpath之後,又一次保持失敗。xpath選擇器工作Firefox不在紅寶石腳本

請讓我們知道這裏有什麼問題。這兩個xpath都在firepath中工作,並且第一個xpath始終在腳本中工作。

require 'selenium-webdriver' 
browser = Selenium::WebDriver.for :firefox 

Given(/^I am on the TRU home page$/) do 

browser.get("https://www.toysrus.com") 

end 

When(/^I search for a product$/) do 

browser.find_element(:name,"keyword").send_key("toys") 

browser.find_element(:xpath,"/html/body/div[4]/div[1]/div/div/div/nav/div/div[2]/div[6]/div").click 

end 

And(/^Click on first product$/) do 

browser.find_element(:xpath,"//div[2]/div/div[2]/div[2]/div/div[2]/div[4]/div/div[2]/div[2]/div[1]/a/div[2]/div[1]/div[2]").click 

end 

Then(/^Take me to PDP$/) do 

pending 

end 
+3

兩個觀察:1.絕對xpaths容易出錯,所以即使它現在工作,它可能會在以後失敗。 2.您可能會遇到這樣的問題:在該元素實際存在於該頁面之前,它正嘗試點擊第二個** XPath **,因爲它正在等待之前點擊觸發的內容。 有關您正在查看的內容的更多詳細信息,您嘗試點擊的元素的** html **以及獲得的錯誤將需要提供有意義的答案。 – mrfreester

+0

請不要使用瀏覽器生成的XPath。它很脆弱,因爲它檢查你不關心的事情,並且它可能不檢查有意義的事情(ID和相關類)。 –

回答

0

這裏是回答你的問題:

而不是絕對xpath可以考慮構建邏輯xpath。下面是xpath您可以使用:

  1. 傳遞搜索中的文字toys

    browser.find_element(:xpath,"//input[@name='keyword']").send_key("toys") 
    
  2. 點擊Search按鈕:

    browser.find_element(:xpath,"//div[@class='search-icon-tru']").click 
    
  3. 點擊第一個產品:

    browser.find_element(:xpath,"//div[@class='product-item__product-title'] [contains(.,'The Peanut Shell Bella Elephant Plush')]").click 
    

讓我知道這個答案是否是您的問題。