0

我想使用使用cssSelector,而不是xpath。我打開CNN網站,把政治學的xpath放在首位。然後嘗試使用cssSelector進行選擇。我無法弄清楚我寫的cssSelector有什麼不對。我正在NoSuchElementExceptionNoSuchElementException異常硒的webdriver發現試圖使用CssSelector

異常在線程 「主要」 org.openqa.selenium.NoSuchElementException:沒有這樣的元件:無法找到元素:{ 「方法」: 「CSS選擇」, 「選擇器」:「* [ ID = 'NAV'] DIV:第n個孩子(2)DIV:第n個孩子(2):第n個孩子(3)「}

這裏是代碼

WebDriver driver = new ChromeDriver(); 
driver.manage().window().maximize(); 
driver.manage().timeouts().implicitlyWait(20,TimeUnit.SECONDS); 
driver.get("http://cnn.com"); 
//driver.findElement(By.xpath("//*[@id='nav']/div[2]/div[2]/a[3]")).click(); 
driver.findElement(By.cssSelector("*[id='nav'] div:nth-child(2) div:nth-child(2) a:nth-child(3)")).click(); 
+0

可以請你發佈日誌 – thanga

+0

線程「main」中的異常org.openqa.selenium.NoSuchElementException:no such element:無法定位元素:{「method」:「css selector」,「selector」:「* [ id ='nav'] div:n-child(2)div:n-child(2)a:n-child(3)「} – Chetu19

+0

1.你確實有4個孩子嗎? nth-child編號從0開始,而不是一個 –

回答

0

的第二個div:nth-child(2)你的選擇器應該實際上是div:nth-child(3),第一個<a> t ag也是一個孩子。你也應該不使用*cssSelctor

driver.findElement(By.cssSelector("[id='nav'] div:nth-child(2) div:nth-child(3) a:nth-child(2)")).click(); 

你也可以使用nav-menu-links類作爲起點

driver.findElement(By.cssSelector("[class='nav-menu-links'] a:nth-child(2)")).click(); 

或部分data-analytics-header屬性

driver.findElement(By.cssSelector("[data-analytics-header*='main-menu_politics']")).click(); 
+0

給定好了,當我跟蹤HTML,那並不CSSSelector遵循相同的規則作爲XPATH同根元素而採取的政治部分。 – Chetu19

+0

那麼,這個元素給我的世界部分,而不是政治。 – Chetu19

+0

@ Chetu19不一定。 – Guy

0

我是一個大的支持者的CSS選擇器只是其他任何東西,但在這種情況下,我可能會使用鏈接文本,而不是CSS選擇器。之後,我會使用像//div[@id='nav']//a[.='Politics']這樣的XPath。如果我不得不使用CSS選擇器,我會使用a[data-analytics-header='main-menu_politics']。第一

0

第一件事,如果可能避免:nth-child和而使用類,IDS或其它(更多或更少)明確的屬性找到的元素。

例如,XPath的你對上cnn.com節錢提供點我,而不是政治。

您應該使用[data-analytics-header='main-menu_politics'].nav-menu-links__link[href='/politics']

此外,您還可以使用#nav代替*[id='nav'].CLASSNAME而不是[class='CLASSNAME']。在w3schools.com有一個方便的css選擇器概述。