2017-04-02 157 views
-2

我在Selenium遇到了麻烦。我正在尝试打开Goog​​le并搜索Selenium。然后打开出现在第一页,所以我这样做:硒C#无法找到元素

driver.FindElement(By.XPath("//*@id=\"rso\"]/div/div/div[1]/div/h3/a")).Click();

不过,这并不与XPath打开第一个网址。它说:Unable to locate element 你能帮我吗?先谢谢你!

回答

1

您的XPath语法是错误的,*符号后面应该有一个括号。

相对的xpath:(// DIV [@ ID = 'IRES'] // DIV [@类= 'SRG'] // H3 [@类= 'R']/a)的[1]

建议使用相对xpath,因为如果页面的html获得更改,则绝对xpath将失败

在单击元素之前,请提供Explicit等待。

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); 
    wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("(//div[@id='ires']//div[@class='srg']//h3[@class='r']/a)[1]"))).Click(); 

试试吧,让我知道它是否适合你。

+1

它做到了!非常感谢你......我也试着用明确的等待和隐含的等待,但没有奏效。你的方式是完美的。再次感谢你!!! –

+0

@Akarsh,当你的'html'被改变时,这个上面的答案将不起作用,所以按照我的意见,你应该使用'relative xpath',而不是'absolute xpath'。 –

+0

@JainishKapadia用相对xpath更新了答案。谢谢 – Akarsh

1

尝试等待,直到生成的链接和点击:

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); 
wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("//div[@class=\"rc\"]/h3/a"))).Click();