【问题标题】:C# Selenium Web Driver and CSS : Start pointC# Selenium Web 驱动程序和 CSS:起点
【发布时间】:2017-05-13 05:31:44
【问题描述】:

我有下一个标签结构:

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

我做以下事情:

IWebDriver _driver;

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

注意,我只需要这样找到嵌套元素:首先我找到父标签,然后我以父标签为起点找到嵌套的标签。 但是当我使用逻辑错误的定位器(“嵌套的父级”,因为“嵌套的父级父级”是错误的定位器)时,parent.FindElement returns(!) 我正确的 IWebElement,就像我从DOM 模型的顶部。

有趣的是,当我这样做时

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

它抛出元素未找到异常。

我想我理解错了,或者只是不知道。它是如何工作的?如何避免“父父嵌套”的问题?

【问题讨论】:

    标签: c# selenium selenium-webdriver css-selectors webdriver


    【解决方案1】:

    我认为你在这里使用了错误的方式,这就是你得到错误的原因

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

    你在这里做 -

    "先找到父标签,然后我以父标签为起点查找 父标签本身”

    这是错误的。可以有不同的方法来获得这个 -

    1. 以父标签为起点,找到子标签-

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

    1. 直接找子标签-

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

    【讨论】:

    • 你是对的,但如果你这样做 var child= driver.FindElement(By.Css("parent")).FindElement(By.Css("parent nested")); (看看第二个定位器)无论如何你都会得到一个正确的元素。我只是想明白为什么。
    • 因为 By.Css("par‌​ent nested") 找到子子作为父标签的“嵌套”,所以无论你可以找到子子 By.Css("parent nested") 或者可以通过将父标签作为起点然后间接地移动到像var child= driver.FindElement(By.Css("parent")).FindElement(By.Css("par‌​ent nested")); 这样的子元素,它也在寻找那个子元素。
    • Css("parent nested")xpath("//parent//nested") 的替代品,因为您也将以这种方式定位嵌套元素
    【解决方案2】:

    cssSelectors 将从右到左进行评估。

    这意味着将评估第一个孩子,然后检查他们的父母是否存在。

    在你的情况下,

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

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

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

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

    参考:

    1. Why do browsers match CSS selectors from right to left?

    【讨论】:

    • 谢谢你和@NarendraRajput
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 2022-01-28
    • 1970-01-01
    相关资源
    最近更新 更多