2016-09-20 39 views
0

我有一個HTML頁面(使用Firefox和/或Chrome打開),並且我試圖找到正在嘗試點擊該網頁的(圖片)元素的正確XPath。我使用Selenium Automation在C#中編寫代碼。下面是當我右鍵單擊並選擇檢查時該元素的外觀:C#中的Selenium XPath未找到錯誤#

(實際網站太長,所以我用{網站}和{不同網站}對它進行了修改)。

編輯:對不起,我忘了,但{網站}是動態的。 {不同網站}是靜態的。

<a href="https://{website}"> 
<img border="0" alt="open now" src="https://{different-website}.gif"> 
</a> 

我想用我的自動點擊IMG,但一切我嘗試失敗的自動化,並說「找不到元素」。我注意到,試圖點擊的img嵌套在上面的{a}元素中。也許這就是爲什麼選擇和點擊非常困難。 我試過的東西,如:

driver.FindElement(By.XPath("//a[starts-with(@href='https://www.{website}')]")).Click(); 

driver.FindElement(By.XPath("//a[contains(@href='https://www.{website}')]")).Click(); 

driver.FindElement(By.XPath("//img[(@src,'img1935.gif')]")).Click(); 

driver.FindElement(By.XPath("//img[(@src,'img1935.gif')]/../a")).Click(); 

driver.FindElement(By.XPath("//a[not(@href)/img/@src | //a[img]/@href")).Click(); 

driver.FindElement(By.XPath("//a[@alt='open now']/@src")).Click(); 

driver.FindElement(By.XPath("//img[@alt='open now']/@src")).Click(); 

所有這些返回「找不到元素」和我卡上還有什麼我應該做的,或嘗試。任何建議將不勝感激。非常感謝你。

回答

0

許多XPath不會找到您要查找的內容。你有沒有嘗試過一些簡單的東西,如

driver.FindElement(By.XPath("//a/img[@alt='open now']")).Click(); 

如果這不起作用,你需要提供更多信息或鏈接到頁面。

+0

這不起作用,我也不能實際給出的網站鏈接,因爲它的分類(因此動態行爲),但我真的可以看到,當我檢查網頁是我想要點擊嵌套在一個段落內。感謝您也試圖幫助 – CRich

+0

試試這個...轉到您正在使用的頁面並在開發控制檯中鍵入$ x(「// a/img [@ alt ='open now']」)'...它返回什麼? – JeffC

+0

嗯...我有3個人在頁面上輸入後,我有3個相同的圖像與精確的XPath。也許這就是Selenium無法找到它的原因。但是因爲我有3個,它不應該找到其中的一個嗎? – CRich

0

嘗試//a[@href="https://{website}"]/img[1]

  • 所有a元素(其中HREF = 「HTTP:// {網站}」)
  • 然後選擇這些元素的第一img子元素

你可以test it here - 該網站也會提供建議。

我發現this page試圖找出XPath

+0

感謝您的回覆,但這不適用於動態{網站},我試過。 – CRich

0

如果您有動態網址的,你應該避免使用在selector.You固定路徑可以使用類似時非常有用:

//a[contains(@href, 'part_of_href_value')] 

如果鏈接轉換爲可以使用類似不同的網站:

//a[contains(@href, 'part_of_href_value1') or contains(@href, 'part_of_href_value2') or contains(@href, 'part_of_href_value3')]

你ç使用href的任何部分。您可以調整爲圖像也上述選擇,與img@href@src

實例替換a: 我有HREF的2個鏈接:
href= https://www.example1.com/blabla/page
href= http://www.second-example.org/bla/page-s

要選擇這兩個環節,我使用例如字既然是常見的有:
//a[contains(@href, 'example')]

要選擇由不同部件/詞語兩個鏈路:
//a[contains(@href, 'blabla/page') or contains(@href, 'bla/page')]

+0

我也試過,它沒有通過使用包含找到元素。此外,無論何時我輸入網站時都會包含如下內容:「// a [包含(@ href,'https:// {網站}')]」,「//」會使整個網站鏈接變爲藍色。我不知道它是否因爲「//」而找不到元素。我還假設在使用包含時,我必須從「https://」開始,但不必輸入整個網站地址。那是對的嗎? – CRich

+0

不可以。當您使用包含時,您可以從任何地方開始並複製您需要的零件。 – lauda

+0

我已經嘗試過不使用「https://」,我也沒有運氣能夠找到元素。如://a[contains(@href,'https://www.google.com/search/help')]「給了我沒有運氣。另外,我嘗試這樣:// a [contains(@ href,'https:// search/help')]「」這也給我帶來了好運 – CRich