【问题标题】:How to click elements that have generated id's if I don't know what the ID will be in Selenium如果我不知道 Selenium 中的 ID 是什么,如何单击已生成 ID 的元素
【发布时间】:2019-11-07 20:34:14
【问题描述】:

假设我有一些 HTML 标记:

    <select id="select_titleOfSelect-1212_01" name="titleOfSelect-1212" 
        <option value="ONE"></option>
        <option value="TWO"></option>
        <option value="THREE"></option>
    </select>

这些选择元素中的多个可以动态生成 其中titleOfSelect 后面的数字总是可以不同的。 如果在同一页面上生成多个选择,“01”也会增加 1。

我已经能够使用这个点击这些:

.click('select[id^="titleOfSelect-"] option[value='ONE']')

如何点击第2个、第3个等等..如果页面上有多个元素,请选择?

我正在使用带有 Selenium 的 Javascript

【问题讨论】:

    标签: javascript selenium testing selenium-chromedriver qa


    【解决方案1】:

    如果 ID 是随机生成的,则不会根据其 ID 搜索元素。您必须使用 XPath 或 CSS 选择器并发挥创意。

    以下是我单击选项的方式:

    // option 1
    driver.findElement(By.xpath("//select/option[@value='ONE']")).click();
    
    // option two
    driver.findElement(By.xpath("//select/option[@value='TWO']")).click();
    
    // etc..
    
    

    或者,如果你不想使用value,你可以使用索引:

    // click first option
    driver.findElement(By.xpath("//select/option[1]")).click();
    
    // click second option
    driver.findElement(By.xpath("//select/option[2]")).click();
    
    // click third option
    driver.findElement(By.xpath("//select/option[2]")).click();
    

    如果页面上有多个select元素,可以尝试对标题做contains查询:

    //select[contains(@title, 'titleOfSelect')]/option[1]
    

    【讨论】:

    • 有道理,谢谢。关于您答案的“如果有多个选择”部分。如何使用包含查询来选择第二个或第三个选择元素。看起来只会选择页面上的第一个?
    • 您可以将option[1] 的索引更改为您要选择的项目的索引——要选择第二个选项,您将使用//select[contains(@title, 'titleOfSelect')]/option[2],对于第三个,您将使用//select[contains(@title, 'titleOfSelect')]/option[3]。如果您的选项中填写了value,您也可以使用//select[contains(@title, 'titleOfSelect')]/option[@value='ONE'][@value='TWO']等。
    • 我的意思是如果我有两个相同的选择元素
    • 抱歉,我误解了你的问题。您也可以使用选择元素的索引,例如://select[1]/option[1]select[2]/option[1]
    【解决方案2】:

    您可以使用 :nth-of-type() 来选择您获得的 SELECT,例如

    select:nth-of-type(2) option[value="TWO"]
    

    将在第二个 SELECT 中选择包含值“TWO”的 OPTION

    【讨论】:

    • 奇怪的是我没有定义
    • 我必须查看代码。我在你的 HTML 的本地副本上运行了这个定位器,它工作得很好。
    【解决方案3】:

    您可以简单地使用findElements 方法找到定位器id^="titleOfSelect-"。这将返回ReadOnlyCollection&lt;IWebElement&gt;,您可以将其转换为列表,然后定位您想要定位的任何index

    【讨论】:

      猜你喜欢
      • 2012-06-16
      • 2015-11-04
      • 2012-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 2013-05-06
      • 1970-01-01
      相关资源
      最近更新 更多