C# 按xpath属性查找所有元素(aria required=true)。//*[@aria required=';true';]

C# 按xpath属性查找所有元素(aria required=true)。//*[@aria required=';true';],c#,selenium,xpath,selenium-webdriver,C#,Selenium,Xpath,Selenium Webdriver,我正在尝试获取包含属性aria required的iWebElement列表。我尝试获取此列表的原因是,在用户继续下一页之前,我可以检查用户是否需要填写所有必填字段 到目前为止,经过两天的搜索,我仍然相信这不应该那么难。我使用的表达式是: “/*[@aria required='true']” 根据我的研究,这意味着它将从我的webdriver的根开始搜索所有元素 [TestMethod] public void CreateProjectWithoutRequiredFields()

我正在尝试获取包含属性aria required的iWebElement列表。我尝试获取此列表的原因是,在用户继续下一页之前,我可以检查用户是否需要填写所有必填字段

到目前为止,经过两天的搜索,我仍然相信这不应该那么难。我使用的表达式是:

“/*[@aria required='true']”

根据我的研究,这意味着它将从我的webdriver的根开始搜索所有元素

[TestMethod]
    public void CreateProjectWithoutRequiredFields()
    {
        GoToProjectPage();
        tracking = CM.GoToNewlyCreatedFrameAfterClickButton("ftbNew", tracking, theDriver);
        CM.Wait(2000);
        bool succesSave = false;
        CM.LogToFile("Create project whitout required fields", tracking);
        foreach (IWebElement e in theDriver.FindElements(By.XPath(".//*[@aria-required='true']")))
        {

            FillDataInNewProjectPage();
            e.Clear();
            CM.GetDynamicElementById("btnSave", theDriver).Click();
            try
            {
                CM.GetDynamicElementById("titel", theDriver).Click();

            }
            catch (Exception)
            {
                succesSave = true;
                NUnit.Framework.Assert.IsFalse(succesSave, "The page is saved with succes, without entering text in the following required fields : " + e.GetAttribute("id").ToString());

            }
            CM.Wait(1000);
        }
}

我将尝试解释我在这里做了什么: 首先,我进入了一个概述页面,里面有我现有的所有项目。在这个页面上,我点击了ftbNew按钮来创建一个新项目。驱动程序会自动切换到正确的帧(我现在选择了正确的帧,因为我在其他页面上使用了这一行。)

然后排队 foreach(driver.FindElements(By.XPath(“./*[@aria required='true']”)中的IWebElement e) {

是否应该在我的驱动程序中找到属性为“aria required='true'的元素?”

然后,它将用数据填充页面,清除从其数据中找到的第一个元素,然后尝试保存它


如果在页面上找到元素titel,那么我们仍然在同一页面上,并且保存操作未成功(根据您在页面上对行为的描述,您不能依赖aria required属性来指示必填字段。我认为您应该回到站点的开发人员那里,让他们为您提供可靠的句柄。这可能很简单,只需查找“*”作为与输入字段关联的标签的最后一个字符,但这有点烦人


作为一个旁观者,你应该考虑为你的成功案例找到一个更具体的例外。现在,如果有任何例外发生,你会宣布成功,但这可能不是你真正想要做的。

谢谢你这么快回答!你是关于那个例外的赖特,我必须更具体。关于这个表达,我问他们是否Cou.ld use而不是“aria required”use“required”,但他们说这需要做很多工作……所以我尝试通过css类(“verplichteControl”表示“requiredControl”)(在我的初始帖子中,我有一个图像)来获取元素。现在,我确实使用以下表达式来获取元素。“/*[包含(@class,'verplichteControl')]”所以它是有效的…但仍然很奇怪为什么你不能通过属性选择元素。哦,你可以通过属性选择元素。这里的问题是你的应用程序没有始终如一地应用aria required属性。例如,我在你包含的图像中的项目负责人输入中没有看到它。也许你可以考虑一下这里有一个产品缺陷,如果开发人员的工作太多(根本不应该如此!),他们至少应该为他们试图使用的属性做好准备。