C# 为什么Selenium在使用页面工厂时找不到基于数组索引的XPath元素?

C# 为什么Selenium在使用页面工厂时找不到基于数组索引的XPath元素?,c#,selenium,xpath,selenium-webdriver,pageobjects,C#,Selenium,Xpath,Selenium Webdriver,Pageobjects,我有一个POM(页面对象模型),它具有以下声明: public class MyPOM { [FindsBy(How=How.XPath, Using="(//textarea)[0]")] private IWebElement questionDescription; //This fails too in Selenium, but successful in Chrome-console: [FindsBy(How=How.XPath, Using="(//input[@cla

我有一个POM(页面对象模型),它具有以下声明:

public class MyPOM
{
 [FindsBy(How=How.XPath, Using="(//textarea)[0]")]
 private IWebElement questionDescription;

 //This fails too in Selenium, but successful in Chrome-console:
 [FindsBy(How=How.XPath, Using="(//input[@class='cso-num'])[0]")]
 private IWebElement questionScore;

 public MyPOM(IWebDriver driver)
 { 
    PageFactory.InitElements(driver, this)
 }

}
在我的Chrome控制台上,一个
$x(“//textarea”)[0]
查询可以正常启动。然而,我的每一个XPath选择器都有这样的“基于数组的索引”,结果是一个
NoTouchElementException
。我不确定是什么问题。在Selenium之外,XPath的每次验证似乎都返回有效的HTMLDOM节点,但在Selenium中并非如此

在页面上找到元素之前,我甚至添加了一个明确的暂停,如下所示,但没有效果:

WebDriverWait wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(5));
但是,如果我以某种方式执行以下操作,则效果很好:

IWebElement questionDescription = GetDriver().FindElements(By.XPath(".//textarea"))[0];
questionDescription.Clear();
questionDescription.SendKeys(description);
使用XPath和PageFactory时,使用基于数组的索引是否有限制

使用XPath的原因:大多数HTML是由开发人员无法访问或控制的底层框架自动生成的(非常不幸)。进行可靠且非脆性测试的最佳方法是使用XPath


更新/解决方案:这是有史以来最愚蠢的一次!XPath索引来自1而不是0!然而,在我删除这个问题之前,已经发布了一个答案。我将保留该决议,而不是发布单独的答案。

当我第一次设置硒测试时,我遇到了类似的问题。尝试使用以下方法:

driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
它应该在初始化驱动程序后运行。我尝试在每次加载页面时分别进行等待,但它们对我也不起作用。5秒对于我正在开发的平台来说似乎足够了,但是可以根据需要进行调整


请注意,C#中的代码段可能不同。这来自Java程序

当我第一次设置硒测试时,我也遇到了类似的问题。尝试使用以下方法:

driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
它应该在初始化驱动程序后运行。我尝试在每次加载页面时分别进行等待,但它们对我也不起作用。5秒对于我正在开发的平台来说似乎足够了,但是可以根据需要进行调整


请注意,C#中的代码段可能不同。这来自Java程序

您正在使用XPath,XPath索引从1开始。因此,如果您试图查找第一个元素,则xpath应该是(//textarea)[1]而不是(//textarea)[0]。

您使用的是xpath,xpath索引从1开始。因此,如果要查找第一个元素,则xpath应该是(//textarea)[1]而不是(//textarea)[0]