rah*_*olm 2 c# selenium css-selectors selenium-webdriver
在google上搜索后,我无法得到满意的答案.你能指导我吗?我有一个div,其中包含li,a,标签.我可以通过其类名使用CssSelector找到div.现在在这个div中,我希望得到一个带有文本的标签,然后点击它.标签如下:
<label>退出</ label>
怎么做 ?
我有一个使用XPath的工作解决方案并迭代div中的所有标签,但我无法使用CssSelector获取它.
我的解决方案
IWebElement menu = CurrentDriver.FindElement(By.CssSelector("div[class='menu-panel right']"));
IWebElement logoutLabel = menu.FindElement(By.XPath("//label[text()='Sign Out']"));
Run Code Online (Sandbox Code Playgroud)
或者使用foreach:
var coll = menu.FindElements(By.TagName("label"));
foreach (var label in coll)
{
if(label.Text.Trim() =="Sign Out")
{
Log("Sign out was found.");
label.Click();
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用CssSelector:
IWebElement logoutLabel = menu.FindElement(By.CssSelector(":contains('Sign Out')"));
IWebElement logoutLabel = menu.FindElement(By.CssSelector("label:contains('Sign Out')"));
IWebElement logoutLabel = menu.FindElement(By.CssSelector("label['Sign Out']"));
Run Code Online (Sandbox Code Playgroud)
但这些都行不通.
Arr*_*ran 11
有一个很好的理由说明你的CSS选择器不起作用,特别contains是它是它落后的地方.为什么?
它不是CSS选择器规范的一部分,因此永远不会工作.
在contains我们都知道,爱其实是从哪里来灒,背后的CSS选择器引擎的jQuery.
如果你想要基于文本的搜索,你将要么必须使用XPath,要么获得这些元素的集合(使用你认为合适的任何定位器),然后在代码中过滤掉它们(就像你在foreach循环中所做的那样).没有一种原生的CSS风格的方式来进行"基于文本的搜索".
就你当前的代码而言,你可能也会失败,因为XPath需要一点点"戳"来告诉它只搜索你当前"元素"的子元素.
IWebElement menu = CurrentDriver.FindElement(By.CssSelector("div[class='menu-panel right']"));
IWebElement logoutLabel = menu.FindElement(By.XPath("//label[text()='Sign Out']"));
Run Code Online (Sandbox Code Playgroud)
应该:
IWebElement menu = CurrentDriver.FindElement(By.CssSelector("div[class='menu-panel right']"));
IWebElement logoutLabel = menu.FindElement(By.XPath(".//label[text()='Sign Out']"));
Run Code Online (Sandbox Code Playgroud)
(注意XPath中的".")
此外,你的foreach循环应该有效,因此你必须在那里放一个断点并确切地检查返回的内容menu.FindElements(By.TagName("label"));.
| 归档时间: |
|
| 查看次数: |
36641 次 |
| 最近记录: |