Locator在无头模式下使用Selenium和ChromeDriver随机失败

时间:2019-04-24 14:28:01

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

我有一个下拉菜单,其中包含文本“我的菜单”。不幸的是,同一下拉菜单也用于文本“我的第二菜单”。我需要单击此“我的菜单”下拉菜单,它看起来像以下内容。

<?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')]

每当我单独运行它时,此测试方案就可以通过。但是,当整个测试套件运行时,该测试会随机失败。在无头模式下运行时也是如此。我可以选择要单击的元素的方式吗?这对测试不会有帮助吗?任何建议将不胜感激。

2 个答案:

答案 0 :(得分:0)

尝试关注Xpath,希望它能起作用。

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

答案 1 :(得分:0)

要对文本为我的菜单的元素上的click(),您需要诱导为element_to_be_clickable()诱导 WebDriverWait ,您可以使用任一方法Locator Strategies

  • 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']"