【问题标题】:C# Selenium XPATH Dynamic Button Select Based on Text in SpanC# Selenium XPATH 动态按钮选择基于 Span 中的文本
【发布时间】:2018-10-22 21:05:14
【问题描述】:

我正在尝试选择一个基于跨度中的人名动态创建的按钮,但我无法正确获取 XPATH 语法。页面上会动态创建几个这样的按钮,所以我需要使用的标识符是客户名称。这是按钮的 HTML。

<button id="172369678903-announce" name="172369678903" data-selected-address-id="172369678903" data-unit-ids="[&quot;miq://document:1.0/Contract/a:1.0/Unit:1.0/dc290763-6cce-46c5-a878-3b5b0e615740#35176ee2-51c5-479b-b63e-a2cc958a2de9&quot;]" data-url="/spr/returns/addressSelection/dc290763-6cce-46c5-a878-3b5b0e615740" class="a-button-text selected-address" type="button">
    <div class="a-column a-span12">
        <div class="a-row">
        <div class="a-section a-spacing-none a-text-left">
            <span class="a-text-bold">
        John Doe
            </span>
        </div>
        </div>
        <div class="a-row">
        <div class="a-section a-spacing-none a-text-left">
            <span>
        20410 SOME STREET, WALNUT, CA, 91789-2435
            </span>
        </div>
        </div>
        <div class="a-row">
        <div class="a-section a-spacing-none a-text-left">
            <span>
Phone number: 2813308004
            </span>
        </div>
        </div>
    </div>
</button>

我有 John Doe 的信息,这就是我需要能够点击此项目的方式。这是我目前拥有的 XPATH 语法,但尝试了许多不同的形式。变量 shipName 包含名称 John Doe。

var addyFinder = driver.FindElement(By.XPath("//button/span[contains(text(),'" + shipName.Trim() + "')]"));

【问题讨论】:

    标签: c# selenium selenium-webdriver xpath webdriver


    【解决方案1】:

    尝试在 XPath 下方选择所需的button 节点:

    "//button[normalize-space(.//span)='" + shipName.Trim() + "']"
    

    【讨论】:

    • 完美运行。感谢您的帮助。
    【解决方案2】:

    正如您所提到的,页面上会动态创建几个这样的按钮,并且您需要使用客户名称,因此您可以创建一个函数并调用使用任何 用户名 的函数如下:

    • 函数定义:

      public void click_user(string username)
      {
          driver.FindElement(By.XPath("//button[@class='a-button-text selected-address' and contains(@data-url,'addressSelection')]//span[@class='a-text-bold'][normalize-space()='" + username + "']")).Click();
      }
      
    • 调用函数:

      click_user("John Doe");
      //or
      click_user("Roro");
      

    【讨论】:

      猜你喜欢
      • 2020-01-18
      • 1970-01-01
      • 2016-10-05
      • 2019-07-28
      • 2016-04-08
      • 1970-01-01
      • 2020-11-25
      • 2012-03-13
      • 1970-01-01
      相关资源
      最近更新 更多