【问题标题】:Selenium C# H5 in DIVDIV 中的硒 C# H5
【发布时间】:2020-02-06 18:02:46
【问题描述】:

我有:

    (1)
    <div>
     <h5> unique name1</h5>
     <div>
      <div>
       I don't want click this div.
      </div>
     </div>
    </div>
    (2)
    <div>
     <h5> unique name2</h5>
     <div>
      <div>
       I want click this div.
      </div>
     </div>
    </div>

如何在 selenium 中找到要单击的 div?非常重要的是...有时我的 div 是 (2) 有时是 (3) e.t.c 。需要使用h5才能找到。

【问题讨论】:

  • 可以使用xpath://h5[contains(text(), 'unique name2')]/following-sibling::div/div
  • 你也可以使用下面的 xpath ://h5[contains(., 'unique name2')]/following-sibling::div[1]/div

标签: c# selenium xpath webdriverwait xpath-1.0


【解决方案1】:

要在h5 下找到并单击所需的div 元素,可以使用以下 XPath:

// declare a wait so we can wait on element to exist
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));

// wait for element to exist
var elementToClick = wait.Until(
    ExpectedConditions.ElementExists((By.XPath("//h5[text()='unique name2']/following-sibling::div/div"))));

// click element
elementToClick.Click();

因为wait.Until返回的是正在等待的WebElement,所以实际上可以将最后两行合并为一行:

// wait for element to exist, then click
wait.Until(
    ExpectedConditions.ElementExists((By.XPath("//h5[text()='unique name2']/following-sibling::div/div")))).Click();

【讨论】:

  • 使用这种方法,您会点击页面两次,一次用于等待(仅表示存在,而不是可点击),一次用于单击它。在您的等待中,等待 clickable 而不是返回找到的元素,然后单击它,例如wait.Until(ExpectedConditions.ElementToBeClickable(...).Click();。现在你只点击了一次页面,等到元素可以点击,然后点击它。
  • True -- 好建议,因为wait.Until 确实返回了正在搜索的元素。我分成几行的原因是为了增加解决方案的清晰度——如果用户不知道wait.Until 返回一个WebElement,那么解决方案可能会让他们感到困惑,所以从这个角度来看,两行是有意义的。我会相应地更新我的答案。
  • 很公平,如果您想将两行分开(为了更清晰),您可以这样做并且仍然只点击一次页面,例如IWebElement e = wait.Until(ExpectedConditions.ElementToBeClickable(...)); e.Click();.
【解决方案2】:

要在&lt;div&gt; 上调用click(),文本为我想单击此div,您必须为ElementToBeClickable() 诱导WebDriverWait,您可以使用以下Locator Strategies:

  • 使用XPATH

    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//h5[contains(., 'unique name2')]//following::div[1]/div"))).Click();
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2013-06-22
    • 1970-01-01
    • 2016-10-28
    • 2012-04-21
    相关资源
    最近更新 更多