C#Selenium Web驱动程序和CSS:起点 - c#

我有下一个标签结构:

<body>
   <parent>
       <nested/>
   </parent>
</body>

我做以下事情:

IWebDriver _driver;

var parent = _driver.FindElement(By.Css("parent"));
var nested = parent.FindElement(By.Css("parent nested"));

注意,我只需要以这种方式找到嵌套的元素:首先,我找到了父标签,然后以父作为起点来查找嵌套的标签。
但是,当我使用逻辑上错误的定位器(“父嵌套的”,因为一起使用“父父嵌套的”是错误的定位器)时,parent.FindElement返回(!)我会纠正IWebElement,就像从DOM模型的顶部进行搜索一样。

有趣的是,当我做

var nested = parent.FindElement(By.Css("parent"));

它将引发找不到元素的异常。

我想我了解某些错误或只是不了解某些内容。它是如何工作的?如何避免“父母父母嵌套”的问题?

参考方案

cssSelectors将从右到左求值。

这意味着将对第一个孩子进行评估,然后检查其父母是否存在。

就你而言

var nested = parent.FindElement(By.Css("parent nested"));

首先,检查nested元素是否在DOM中作为子元素存在(此处为嵌套元素)。如果存在,则检查parent是否为其父级。

var nested = parent.FindElement(By.Css("parent"));

在这里,将检查parent是否是给定元素的子元素(调用父元素)。但事实并非如此。因此,给出NoSuchElementException

参考:

Why do browsers match CSS selectors from right to left?

Selenium Webdriver(Java)-查找禁用了属性=“”的元素 - java

我有<input id="test" disabled="">。如何找到具有属性disable =“”的元素。附言:在这种情况下,我不需要使用ID。我想找到一个具有禁用属性的元素。我尝试使用String enbl = Login.driver.findElement(By.cssSelector("…

Selenium / C#WebDriverWait不等待 - c#

我有一个网站,其jQuery幻灯片在顶部下方,并列出了我要使用的所有语言:http://testing.bestshippers.com/net/index.aspx,滑块在顶部是“语言选择”按钮。我可以单击它,但是在单击幻灯片中的元素时出现错误。我相信这是因为在尝试选择它们之前,我需要暂停几秒钟。可能是错的吗?我相对较新,但是我已经阅读了有关WebDriv…

Selenium:如何使RemoteDriver始终附加到当前的浏览器选项卡? - javascript

我正在开发一个Windows应用程序,该应用程序可以通过语音命令操纵浏览器。我想适当地处理用户添加一些标签并根据需要更改所选标签的情况。事实证明,RemoteDriver仅与一个选项卡一起使用,并且可以通过提供选项卡手柄将焦点切换到另一个选项卡。但是我不知道如何获取选定的选项卡句柄并始终检查选定的选项卡是否已更改,或者是否存在始终与选定的选项卡一起使用的方法…

将ExtentTest的默认设置为FAILED - java

我正在使用extentreports为使用Java和Selenium编写的测试添加报告。我注意到,如果ExtentTest有两个日志“ INFO”和“ PASSED”,则如果未捕获通过日志,则将其视为“通过”。我如何以某种方式更改它,如果未通过测试,它将被自动标记为“失败”? 参考方案 默认情况下,无法更改行为以使测试用例失败。它是一个设计决策,每个测试框架…

如何禁用python和selenium中的Chrome通知弹出窗口? - python

如何禁用python和selenium中的Chrome通知弹出窗口?我试过了:chrome_options = webdriver.ChromeOptions() prefs = {"profile.default_content_setting_values.notifications" : 2} chrome_options.add_…