【发布时间】:2016-03-14 09:33:19
【问题描述】:
我正在尝试获取包含属性 aria-required 的 IwebElements 列表。我尝试获取此列表的原因是,我可以检查用户是否需要填写所有必填字段,然后才能继续下一页。
到目前为止,经过 2 天的搜索,我仍然相信它不应该那么难。我正在使用表达式:
".//*[@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 (IWebElement e in theDriver.FindElements(By.XPath(".//*[@aria-required='true']"))) {
通常应该在我的驱动程序中找到具有属性“aria-required='true'”的元素
然后它会用数据填充页面,清除从数据中找到的第一个元素,然后尝试保存它。
如果在页面上找到元素标题,那么我们仍然在同一页面上并且保存操作不成功(
所以接下来我们再次覆盖页面上的每个字段,并清除这次找到的第二个元素。
以此类推……
我的猜测是,xpath 很难找到'旧' aria-required 属性...当我尝试使用 firebug 和其他 xpath 检查器验证我的表达式时,aria-required 属性并不总是存在。有时它会找到输入字段,有时却找不到。
正如您在 firebug 控制台中看到的,并非所有属性都已加载,account-manager 具有 aria-required 属性,但项目负责人没有。如果我再次检查元素,但这次单击项目负责人。该属性将被加载。很奇怪....
额外信息:我正在使用框架,我知道如果你位于错误的框架中会出现很多问题,但我确信他正在寻找正确的框架。特别是因为我找不到使用带有上述表达式的萤火虫的元素。如果我将表达式更改为 .//input,它会找到元素,但也会选择不需要的输入字段。
我要提前感谢所有想要调查我的问题的人 :) 阿德里安
【问题讨论】:
标签: c# selenium xpath selenium-webdriver