XPath选择没有唯一id属性的元素?

时间:2017-11-26 19:57:02

标签: c# html xml selenium xpath

我正在使用Selenium并测试新东西,我尝试制作一个程序点击Yt上的Like按钮,但XPath是错误的,我不知道如何让XPath正确,任何人都可以告诉我获取元素的“真实”Xpath的方法?

chrome.FindElementByXPath("//*[@id='button']").Click();

使用此XPath有多个按钮,这是肯定的,但我想知道如何指定我想要的按钮。

<yt-icon-button id="button" class="style-scope ytd-toggle-button-renderer style-text" aria-pressed="false"><button id="button" class="style-scope yt-icon-button" aria-label="Ich mag das Video (wie 8.019 andere auch)"><yt-icon class="style-scope ytd-toggle-button-renderer"><svg viewBox="0 0 24 24" preserveAspectRatio="xMidYMid meet" focusable="false" class="style-scope yt-icon" style="pointer-events: none; display: block; width: 100%; height: 100%;"><g class="style-scope yt-icon">
        <path d="M1 21h4V9H1v12zm22-11c0-1.1-.9-2-2-2h-6.31l.95-4.57.03-.32c0-.41-.17-.79-.44-1.06L14.17 1 7.59 7.59C7.22 7.95 7 8.45 7 9v10c0 1.1.9 2 2 2h9c.83 0 1.54-.5 1.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73v-1.91l-.01-.01L23 10z" class="style-scope yt-icon"></path>
      </g></svg>
    
  </yt-icon></button></yt-icon-button>

1 个答案:

答案 0 :(得分:2)

//*[@id="button"]
  

使用此XPath的按钮不止一个,这是肯定的,但我想知道如何指定我想要的按钮。

有很多方法可以使上述XPath更具选择性。哪种方法效果最好取决于你的目标标记,你已经忽略了它给我们看。

以下是一些增加XPath特异性的一般性想法:

  • 指定遗产/full/path/to/element[@id="button"]
  • 添加其他属性//*[@id="button" and @class="UniqueClassName"]
  • 使用索引//*[@id="button"][2]
  • 利用标签//*[@id="button" and preceding-sibling::span="Age:"]