基于Span中文本的C#Selenium XPATH动态按钮选择

时间:2018-10-22 21:05:15

标签: c# selenium selenium-webdriver xpath webdriver

我试图选择一个根据跨度中人的名字动态创建的按钮,但我无法正确设置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() + "')]"));

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

正如您提到的,页面上将动态创建多个按钮,并且您需要使用客户名称,因此您可以创建一个函数并调用可以使用任何用户名进行操作,如下所示:

  • 功能定义:

    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");
    
相关问题