【问题标题】:Locator fails randomly with Selenium and ChromeDriver in headless mode定位器随机失败,Selenium 和 ChromeDriver 在无头模式下
【发布时间】:2019-09-13 21:28:52
【问题描述】:

我有一个下拉菜单,其中包含“我的菜单”文本。不幸的是,相同的下拉菜单用于另一个目的,文本“我的第二个菜单”。我需要点击这个“我的菜单”下拉菜单,如下所示。

<?xml version="1.0" encoding="UTF-8"?>
<div class="c-composedDropdown u-display--flex u-align-items--center u-color--white u-cursor--pointer u-border-radius">
  <div class="u-display--flex u-align-items--center">
     <span class="flag-icon flag-icon-lg flag-icon-ie composedDropdown__subTitle__icon u-color--white" />
     <div>
        <div class="u-display--block u-display--flex u-align-items--center">
           <span class="u-font-weight--bold u-margin-right--medium">My Menu</span>
           <svg xmlns="http://www.w3.org/2000/svg" baseProfile="tiny" width="24" height="24" fill="currentColor" color="#37454D" viewBox="0 0 24 24" class="c-composedDropdown__arrow-icon u-color--blue-lighter">
              <path fill="none" stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M9.5 7l5 5m-5 5l5-5" class="svg-color--primary" />
           </svg>
        </div>
        <p class="c-composedDropdown__subTitle u-display--block">Sample</p>
     </div>
  </div>

目前,我正在使用 XPath 来捕获它,它看起来如下所示。

//*[contains(@class, 'c-composedDropdown') and contains (.,'My Menu')]

只要我单独运行它,测试场景就可以通过。但是当整个测试套件运行时,这个测试随机失败。在无头模式下运行时也是如此。关于选择要单击的元素的方式,我能做些什么吗?这会帮助测试不那么不稳定吗?任何建议将不胜感激。

【问题讨论】:

  • 请使用基于格式化文本的相关 HTML 更新您的问题。
  • @KunduK 我已经用基于文本的 HTML 更新了问题

标签: selenium selenium-webdriver xpath css-selectors webdriver


【解决方案1】:

尝试遵循 Xpath 希望这会奏效。

//div[contains(@class,"c-composedDropdown")]//following-sibling::span[text()="My Menu"]

【讨论】:

  • 只是出于好奇,因为我仍在深入学习 XPaths,这对目前测试的脆弱性有何帮助? :)
  • @mayooran :不确定它是否会在无头模式下工作。先尝试交互模式,检查是否有效。如果有效,然后尝试无头模式。让我知道它是怎么回事?
【解决方案2】:

click()元素上的文本为我的菜单,你需要诱导WebDriverWaitelement_to_be_clickable(),你可以使用@987654321中的任何一个@:

  • cssSelector

    "div.c-composedDropdown span.u-font-weight--bold.u-margin-right--medium"
    
  • xpath

    "//div[contains(@class, 'c-composedDropdown')]//span[@class='u-font-weight--bold u-margin-right--medium' and text()='My Menu']"
    

【讨论】:

  • 我不能使用上面的 CSS 选择器,因为还有另一个下拉菜单具有相同的属性,但具有不同的文本“我的第二个菜单”,正如我在问题中提到的 :)
  • @mayooran 如果您可以使用两个相似的 DropDown 节点更新问题,那么我们也可以锻炼一个有效的 CssSelector。您可以在我的答案中使用 xpath 更新结果吗?
  • XPath 似乎不正确,让我一直无法找到元素:(
  • 可能您没有添加对您的用例至关重要的 WebDriverWait
猜你喜欢
  • 1970-01-01
  • 2018-06-11
  • 2014-12-31
  • 2019-09-07
  • 1970-01-01
  • 1970-01-01
  • 2018-01-19
  • 1970-01-01
  • 2014-01-07
相关资源
最近更新 更多