我试图从以下代码中找到“用户设置成功更新”的字段名:
<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 " ";基本上,我试图澄清,如果用户更新是否成功,所以如果它是成功的,我想代码返回我与文本“用户设置更新成功”。但是,我面临的问题是,即使更新成功,它也无法返回值,并且正在抛出异常。
发布于 2016-07-13 18:37:30
您要匹配的div实际上有两个类:“注意”和“成功”。
最好使用CSS来匹配它。试一试
var title = Driver.Instance.FindElements(By.CssSelector("div.notice.success"))[0];这将选择一个同时具有“注意”类和“成功”类的div。处理此问题的另一种方法是将div上的类更改为“注意-成功”,这可以由By.ClassName进行匹配。
发布于 2016-07-13 23:49:03
既然你在问我的问题,我想我应该在这里发表我的评论,这样我就能解释得更多。我将从我的建议开始(包括基于我的建议的一些更改),然后解释几个您可以使用的其他方法。
我的建议
这是我要用的代码
IReadOnlyCollection<IWebElement> title = Driver.FindElements(By.Id("btn-usersettings"));
if (title.Any())
{
return title.ElementAt(0).Text;
}
return " ";这段代码通过ID查找元素并抓取一个集合,检查集合是否包含任何元素(.Any()),然后返回它存在的文本f或空字符串(如果不包含)。
如果您使用.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。
CSS选择器参考
CSS选择提示btn-usersettings,所以我会使用它。通常,ID是查找元素的最佳方法。根据HTML标准,它在页面上应该是唯一的,因此它是定位元素的最安全、最可靠的方法。
Driver.FindElement(By.Id("btn-usersettings"));https://stackoverflow.com/questions/38358953
复制相似问题