尝试通过x-path查找元素时抛出NoSuchElementException

时间:2016-02-13 11:06:00

标签: c# selenium selenium-webdriver

如果我在一个主类文件中编写代码,它运行良好,但是当我使用不同的类和方法调用编写代码时,会产生此错误。

堆栈追踪:

  

10秒后超时{“无法找到元素:{\”method \“:\”xpath \“,\”selector \“:\”(// div [@ class ='item-content'] )[位置()= 3] \ “}”}

代码:

WebDriverWait wait = new WebDriverWait(driver, new TimeSpan(0, 0, 10));
wait.Until(ExpectedConditions.ElementIsVisible(By.XPath("(//div[@class='item-content'])[position()=3]")));

var admi = driver.FindElement(By.XPath("(//div[@class='item-content'])[position()=3]"));
admi.Click();

HTML:

<a href="javascript:void(0)">
    <div class="item-content"style="paddingright:10px; padding-top: 5px">
                  <div class="item-media">
                       <i style="font-size:20px"class="iconProfile2"></i>
                   </div>
                    <div class="item-inner">
                        <span class="title"> Profile </span>
                         <i class="icon-arrow" style="margin-top: 3px">
                          </i>
                   </div>
         </div>
  </a>

2 个答案:

答案 0 :(得分:1)

可能是你给了错误的XPath或者 尝试以下代码。

WebDriverWait wait = new WebDriverWait(driver, new TimeSpan(0, 0, 30));
wait.Until(ExpectedConditions.ElementExists(By.XPath("(//div[@class='item-content'])[position()=3]")));
var admi = driver.FindElement(By.XPath("(//div[@class='item-content'])[position()=3]"));
admi.Click();

在Firefox浏览器中安装FirePath插件并与Firebug一起使用。 并获得元素的确切firepath,然后执行click事件。 请查看附图中的火道。FirePath use example //检查图片

答案 1 :(得分:1)

我不确定position()=3是什么,但你的xpath错了。要使用<div>课程item-content获取

driver.FindElement(By.XPath("//div[@class='item-content']"));

或者

driver.FindElement(By.ClassName("item-content"));

或使用等待

var admi = wait.Until(ExpectedConditions.ElementIsVisible(By.ClassName("item-content")));

wait.Until会返回正在等待的WebElement

  

修改

要在列表中按位置选择元素

driver.FindElement(By.XPath("//div[@class='item-content'][3]"));

或者将所有这些内容放在List中并按索引

选择
IList<IWebElement> elements = driver.FindElements(By.ClassName("item-content")); // note the spelling of FindElements
elements[2].Click();