我试图从以下代码中找到字段名“用户设置已成功更新”:
<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 " ";
基本上,我试图澄清,如果用户更新成功与否,所以如果成功,我希望代码返回文本“用户设置更新成功”。但我面临的问题是,即使更新成功,它也无法返回值,并抛出异常。
既然你问了问题,我想我会在这里发布我的评论,这样我就可以解释更多。我将从我的建议开始(包括基于我的建议的一些更改),然后解释您可以使用的其他几种方法。
我的建议
这是我将使用的代码
IReadOnlyCollection<IWebElement> title = Driver.FindElements(By.Id("btn-usersettings"));
if (title.Any())
{
return title.ElementAt(0).Text;
}
return " ";
此代码按ID查找元素并获取集合,检查集合是否包含任何元素(.any()
),然后返回存在的文本,如果不存在则返回空字符串。
如果使用< code >。FindElement()并且它不在那里,它将抛出一个< code > ElementNotFoundException 。解决这个问题的推荐方法是提取一个集合,并查看该集合是否为空。如果它不为空,则从集合中获取第一个元素,这就是您想要的元素。
查找元素的基本规则:如果元素始终存在,请使用.FindElement()
。如果不确定是否存在,请使用<code>。FindElements()并使用检查是否包含元素。Any()
。
我对您的代码的建议
第一行抓取集合的第一个元素。有几个问题。首先,始终定义正确的类型。var
可以工作,但有很多理由不使用它。“IWeb 元素
”是 Web 元素的 C# 类型。我只读收集
你的代码的其余部分很好,我只是提供了一个我使用的替代方案,而不是检查
null
。
来回答你的问题
你有密码
Driver.Instance.FindElements(By.ClassName("notice success"))[0];
By.类名()
只接受一个类名。由于您想要的元素
<div id="btn-usersettings" class="tab-content clearfix">
有两个类名,< code>tab-content
和< code>clearfix,您将得到一个类似于
不允许使用复合类名
有几种方法可以解决这个问题。
>
使用 By.ClassName()
- 如果要执行此操作,只需选择一个要使用的类名。您必须确定单个类名是否足够唯一,因为您可以访问所有HTML。它可能有效,但我会推荐另一种方法。
Driver.Instance.FindElement(By.ClassName("success"));
通过切换到<code>。CssSelector()-CSS选择器非常强大。我将为您提供查找此元素所需的代码,但也会留下一些链接供您查看。如果你要学习Selenium,你需要学习CSS选择器。代码将是
Driver.Instance.FindElement(By.CssSelector("div.tab-content.clearfix"));
这是在寻找一个DIV
标记,该标记的类(.
)名称为tab-content
,另一个类名为clearfix
。
CSS选择器参考
选择器提示
切换到ID-推荐。由于您的元素有一个ID,btn-userset
,我会使用它。通常,ID是查找元素的最佳方式。根据超文本标记语言标准,它在页面上应该是唯一的,因此它是定位元素的最安全、最可靠的方法。
Driver.FindElement(By.Id("btn-usersettings"));
您试图匹配的div实际上有两个类:“notice”和“success”。
你最好尝试使用CSS来匹配它。尝试
var title = Driver.Instance.FindElements(By.CssSelector("div.notice.success"))[0];
这将选择同时具有“通知”类和“成功”类的 div。处理此问题的另一种方法是将该 div 上的类更改为“通知成功”,该类可以与 By.ClassName 匹配。
简介 自动化是智能家居系统的核心,Home Assistant 提供了丰富的自动化配置模板和延展性。高级自动化的编辑请参考 Template 板块。 默认安装环境下,自动化相关文件为 automations.yaml,用户也可通过前端页面 (配置——自动化)编辑自动化,在前端编辑保存后,automations.yaml 文件将自动同步更新。目前自动化面板已全面汉化: 逻辑 Home Assista
我们不允许寻求书籍、工具、软件库等推荐的问题。你可以编辑这个问题,以便用事实和引用来回答。 是否可以跟踪您是否正在使用自动化工具自动执行任务? 有人能回答我的问题吗?
我是新来的,我拼命地试图用SeleniumChromewebDrive在youtube上上传视频,但是当我试图登录我的谷歌账户时,它阻止了我这样做,因为Chrome意识到这个过程是自动的。它给我的错误是浏览器不安全。 有没有人知道如何避开这个问题,或者如何在我的帐户登录后打开chrome或其他建议?
我想使用Cucumber与SoapUI和Selenium链接,以创建一个自动化功能测试。我只找到了一个关于它的网站,描述了首先我必须创建一个SoapUI项目并将其保存为一个。xml文件。然后,我应该使用Cucumber和Selenium将该文件包含到测试项目中。 我的第一个问题是我需要做什么配置?(在任何配置中使用xml.pom文件时) 我的第二个也是最后一个问题是:如果我每晚都和Jenkins一
我正在设置在网站上运行的自动化测试,以确保一切仍然正常工作。我有一个显示记录表的网页。 我想测试加载选定的网页 我已经完成了前3个步骤,但我仍停留在第4步。有人能帮忙吗?谢谢康纳