简体   繁体   中英

Selenium(WebDriver) Cannot find and click element: <a class=“page-next” href=“javascript:gotoPage(2)”></a>

-Hello, thank you for reading my post. I have spent all day trying to figure this out. Just trying to click the above element to iterate to the next page of product reviews (this doesn't change the URL). The element corresponds to the "next" button on the product feedback section of the page.

Here is My code:

using OpenQA;
using OpenQA.Selenium;
using OpenQA.Selenium.Support;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Support.UI;
using OpenQA.Selenium.IE;

....

IWebDriver driver = new FirefoxDriver();

driver.Navigate().GoToUrl("http://www.aliexpress.com/item/Wholesale-DIY-Cardboard-Hang-tag-Retro-Gift-Hang-tag-500pcs-lot-Free-shipping-Thank-you/538222647.html");

driver.FindElement(By.XPath("/html/body/div[3]/div[10]/div[2]/div[2]/div/div/ul/li[2]/a")).Click();

The above click command is just to open the product feedback section of the webpage (it works). Next I just want to select the next page of the product feedback but haven't been successful.Below are some commands that I've tried to click the next button and move to the next page of the product feedback listings. I'm new to programming, as you can probably see.

driver.FindElement(By.XPath("/html/body/div/div[2]/div/div[2]/div/a[3]")).Click();
NoSuchElementException was unhandled: Unable to locate element: "method":"xpath","selector":"/html/body/div/div[2]/div/div[2]/div/a[3]"}"

driver.FindElement(By.XPath("//a[contains(@class,'page-next')]")).Click();
NoSuchElementException was unhandled:Unable to locate element: {"method":"xpath","selector":"//a[contains(@class,'page-next')]"}

       driver.FindElement(By.XPath("/html/body/div/div[2]/div/div[2]/div/a[@href='javascript:gotoPage(2)]")).Click(); 
InvalidSelectorException was unhandled: The given selector /html/body/div/div[2]/div/div[2]/div/a[@href='javascript:gotoPage(2)] is either invalid or does not result in a WebElement. The following error occurred:

InvalidSelectorError: Unable to locate an element with the xpath expression /html/body/div/div[2]/div/div[2]/div/a[@href='javascript:gotoPage(2)] because of the following error:

[Exception... "The expression is not a legal expression."  code: "12" nsresult: "0x805b0033 (SyntaxError)"  location: "file:///C:/Users/Danny/AppData/Local/Temp/anonymous695678260.webdriver-profile/extensions/fxdriver@googlecode.com/components/driver_component.js Line: 5773"]

    driver.FindElement(By.XPath("//a[@href='javascript:gotoPage(2)]")).Click(); 
InvalidSelectorException was unhandled: The given selector //a[@href='javascript:gotoPage(2)] is either invalid or does not result in a WebElement. The following error occurred:

InvalidSelectorError: Unable to locate an element with the xpath expression //a[@href='javascript:gotoPage(2)] because of the following error:  

[Exception... "The expression is not a legal expression."  code: "12" nsresult: "0x805b0033 (SyntaxError)"  location: "file:///C:/Users/Danny/AppData/Local/Temp/anonymous2137829175.webdriver-profile/extensions/fxdriver@googlecode.com/components/driver_component.js Line: 5773"]         

driver.FindElement(By.LinkText("2")).Click();

No error here, but this code clicks the wrong button on the page.

driver.FindElement(By.LinkText("javascript:gotoPage(2)")).Click();   
NoSuchElementException was unhandled: Unable to locate element: {"method":"link text","selector":"javascript:gotoPage(2)"}

driver.FindElement(By.TagName("a")).FindElement(By.LinkText("Next")).Click();
NoSuchElementException was unhandled: Unable to locate element: {"method":"link text","selector":"Next"}

driver.FindElement(By.CssSelector("html body.product-evaluation div#transction-feedback div.rating-detail div.topnav div#pagination-top.pagination div.pos-right a.page-next")).Click();
NoSuchElementException was unhandled: Unable to locate element: {"method":"css selector","selector":"html body.product-evaluation div#transction-feedback div.rating-detail div.topnav div#pagination-top.pagination div.pos-right a.page-next"}

IJavaScriptExecutor JavascriptExecutor = driver as IJavaScriptExecutor;

JavascriptExecutor.ExecuteScript("gotoPage(2)");
"Unexpected error. ReferenceError: gotoPage is not defined"

driver.FindElement(By.XPath("//a[contains(text(),'Next')]")).Click();

No error, nothing happens

driver.FindElement(By.CssSelector("css=a.page-next")).Click(); 

InvalidSelectorException was unhandeled:The given selector css=a.page-next is either invalid or does not result in a WebElement. The following error occurred:[Exception... "An invalid or illegal string was specified"  code: "12" nsresult: "0x8053000c (NS_ERROR_DOM_SYNTAX_ERR)"  location: "file:///C:/Users/Danny/AppData/Local/Temp/anonymous797491401.webdriver-profile/extensions/fxdriver@googlecode.com/components/driver_component.js Line: 7717"]

driver.FindElement(By.XPath("//div[@id='pagination-top']/div/a[2]"));

NoSuchElementException was unhandled:Unable to locate element: {"method":"xpath","selector":"//div[@id='pagination-top']/div/a[2]"}

I've also tried:automation in Internet Explorer, and waiting for the page to load fully before proceeding.

The following is the situation I am focusing on:

driver.FindElement(By.XPath("//a[contains(@class,'page-next')]")).Click();

NoSuchElementException was unhandled:Unable to locate element: {"method":"xpath","selector":"//a[contains(@class,'page-next')]"}

I would suggest that you must add in a method prior to searching for the element, to wait for its existence on the page. I feel that the element you are searching for has not been loaded on the page by the time you try to search for it so Selenium instantly fails. I would suggest going to this link and using either an Implicit or Explicit wait. I feel this is the issue because your XPath looks correct according to the HTML in your title.

The difference between these is that Implicit waits are set for each time you search for an element only while Explicit waits can have any condition to wait for and can have a different timeout for each case. Read the link provided and see if it makes sense, if not please post your attempt and I will try to help.

I experienced this problem today with the following xpath: //a[@class='myclass' and Text()='My Special link']

I was supposed to verify the syntax in firebug using the xpath tool, and it found the element. In java code it thrown the very same exception as you. I discovered the lil thing that was wrong was "Text()" I changed it to "text()" and it works. Subtle case sensitive problem lol.

I also saw in another forum a similar syntax issue, like: //[@class='myclass' and Text()='My Special link']

I guess the person wanted to find anything with class "myclass", it didn't work. It worked when an * was added, though. //*[@class='myclass' and Text()='My Special link']

Take a look to the syntax of your xpath,

cheers!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM