我正在尝试找到字段名称"用户设置已成功更新"来自以下代码:
<div id="btn-usersettings" class="tab-content clearfix">
<h4>Set your User Settings in This Section</h4>
<div class="notice success">
<i class="icon-ok icon-large"/>
User Settings Updated Successfully
<a href="#close" class="icon-remove"/>
</div>
<fieldset>
<input type="submit" name="submit" value="Save Changes"/>
</div>
我在C#中使用的代码是
var title = Driver.Instance.FindElements(By.ClassName("notice success"))[0];
if (title != null)
return title.Text;
return " ";
基本上我试图澄清,如果用户更新成功与否,那么如果成功,我想编码返回我的文本&#34;用户设置已成功更新&#34;。但是我面临的问题是,即使更新成功,它也无法返回值并且它会抛出异常。
答案 0 :(得分:0)
您尝试匹配的div实际上有两个类:&#34; notice&#34;和&#34;成功&#34;。
尝试使用CSS匹配它会更好。尝试
var title = Driver.Instance.FindElements(By.CssSelector("div.notice.success"))[0];
这将选择一个包含&#34; notice&#34;的div。上课和成功&#34;类。处理这个问题的另一种方法是将该div上的类改为&#34; notice-success&#34;,它可以与By.ClassName匹配。
答案 1 :(得分:0)
既然你在问问题,我想我会在这里发表评论,所以我可以解释一下。我将从我的建议开始(包括根据我的建议进行一些更改),然后解释一些您可以使用的其他方法。
我的推荐
这是我将使用的代码
IReadOnlyCollection<IWebElement> title = Driver.FindElements(By.Id("btn-usersettings"));
if (title.Any())
{
return title.ElementAt(0).Text;
}
return " ";
此代码按ID查找元素并抓取集合,检查集合是否包含任何元素(.Any()
),然后返回它存在的文本或如果不存在则返回空字符串。
如果您使用.FindElement()
但它不存在,则会抛出ElementNotFoundException
。推荐的解决方法是拉取集合并查看集合是否为空。如果它不是空的,你可以从集合中获取第一个元素,这就是你想要的元素。
查找元素的基本规则:如果元素始终存在,请使用.FindElement()
。如果它存在一些不确定性,请使用.FindElements()
并使用.Any()
检查是否包含元素。
我对您的代码的建议
你的第一行抓住了一个集合的第一个元素。有一些问题。首先,始终定义正确的类型。 var
可以使用,但有很多理由不使用它。 IWebElement
是Web元素的C#类型。 IReadOnlyCollection<IWebElement>
是Web元素集合的C#类型。在您的代码中,您使用.FindElements()
但只使用第一个元素。如果您只想找到第一个元素,则可以使用.FindElement()
代替。
您的其余代码很好,我只提供了一种替代方案,而不是检查null
。
回答您的问题
你有代码
Driver.Instance.FindElements(By.ClassName("notice success"))[0];
By.ClassName()
只接受一个类名。既然你想要的元素
<div id="btn-usersettings" class="tab-content clearfix">
有两个类名,tab-content
和clearfix
,您将收到类似
不允许使用复合类名称
有几种解决方法。
与By.ClassName()
保持联系 - 如果您想这样做,则必须只选择一个要使用的类名。由于您可以访问所有HTML,因此您必须确定单个类名是否足够独特。它可能有用,但我会推荐另一种方法。
Driver.Instance.FindElement(By.ClassName("success"));
切换到By.CssSelector()
- CSS选择器非常强大。我会给你找到这个元素所需的代码,但也留下一些你可以查看的链接。如果您要做Selenium,您将需要学习CSS选择器。代码是
Driver.Instance.FindElement(By.CssSelector("div.tab-content.clearfix"));
这是在寻找一个DIV
标记,其标记为.
,tab-content
,另一个类名为clearfix
。
切换到ID - 推荐。由于您的元素具有ID btn-usersettings
,我会使用它。通常,ID是查找元素的最佳方式。按照HTML标准,它在页面上应该是唯一的,因此它是找到元素的最安全,最可靠的方法。
Driver.FindElement(By.Id("btn-usersettings"));