0

-您好,感谢您阅读我的帖子。我花了一整天的时间试图弄清楚这一点。只需尝试单击上述元素以迭代到产品评论的下一页(这不会更改 URL)。该元素对应于页面产品反馈部分的“下一步”按钮。

这是我的代码:

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();

上面的点击命令只是打开网页的产品反馈部分(有效)。接下来我只想选择产品反馈的下一页但没有成功。以下是我尝试单击下一步按钮并移动到产品反馈列表的下一页的一些命令。正如您可能看到的那样,我是编程新手。

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在这里,但是此代码单击页面上的错误按钮。

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();

没有错误,没有任何反应

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]"}

我也尝试过:Internet Explorer 中的自动化,并在继续之前等待页面完全加载。

4

2 回答 2

0

以下是我关注的情况:

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

NoSuchElementException 未处理:无法定位元素: {"method":"xpath","selector":"//a[contains(@class,'page-next')]"}

我建议您必须在搜索元素之前添加一个方法,以等待它在页面上的存在。我觉得您正在搜索的元素在您尝试搜索时尚未加载到页面上,因此 Selenium 立即失败。我建议转到此链接并使用隐式或显式等待。我觉得这是问题所在,因为根据标题中的 HTML,您的 XPath 看起来是正确的。

它们之间的区别在于,每次搜索元素时都会设置隐式等待,而显式等待可以有任何等待条件,并且每种情况可以有不同的超时。阅读提供的链接,看看它是否有意义,如果没有,请发布您的尝试,我会尽力提供帮助。

于 2013-04-22T05:09:53.683 回答
0

我今天使用以下 xpath 遇到了这个问题: //a[@class='myclass' and Text()='My Special link']

我应该使用 xpath 工具验证 firebug 中的语法,它找到了元素。在 java 代码中,它抛出了和你一样的异常。我发现错误的事情是“Text()”,我将其更改为“text()”并且它有效。微妙的大小写敏感问题大声笑。

我还在另一个论坛看到了类似的语法问题,例如: //[@class='myclass' and Text()='My Special link']

我猜这个人想用“myclass”类找到任何东西,它没有用。但是,当添加 * 时它起作用了。//*[@class='myclass' and Text()='My Special link']

看看你的 xpath 的语法,

干杯!

于 2013-07-10T22:35:45.997 回答