【问题标题】:Selenium: Trouble opening drop down menu in spanSelenium:无法在跨度中打开下拉菜单
【发布时间】:2021-05-03 13:42:00
【问题描述】:

我无法访问跨度内的下拉菜单,甚至无法打开它(只能通过意外发生的功能。

我正在尝试点击该站点的下拉菜单:https://globaldata.pt/cart(您需要在购物车中放入一些东西才能显示,它是改变数量的那个)。

我已经尝试了很多不同的选择器,目前不确定这是否是选择器相关的问题。我也已经尝试过选择,但不起作用,因为它告诉我这是一个跨度。

这是我的代码的相关部分:

@FindBy(id = "quantity-selector")
private WebElement quantity_selector_cart;

public void setQuantity() {
    String initial_count = this.quantity_counter.getText();
      
            this.quantity_counter.click();



    //this.quantity_counter.isSelected();
    //driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

  /*  List<WebElement> quantity_values = driver.findElements(By.xpath("/html//select[@id='quantity-selector']"));
    for (WebElement qv : quantity_values) {
        if (qv.getText().equalsIgnoreCase("3"));
        {
            qv.click();
        }
    }*/


}

TestNG 告诉我测试通过了,所以我认为点击会以某种方式起作用?预期的行为是它应该保持打开状态,所以我可以从下拉菜单中选择一些东西,这不会发生。奇怪的是,当我添加当前注释掉的代码(应该单击下拉菜单中值为 3 的元素的代码)时,确实会发生这种情况。我真的不明白,希望你能帮助我理解我做错了什么。

编辑:这是我认为的 html 代码的相关部分,我知道它在相关部分说“选择类”,但它确实被 selenium 识别为跨度并引发错误

<div class="d-flex flex-lg-column align-items-end justify-content-between content-right" data-qa="quantity-selector-T8BLACK">
<div class="cart-quantity-selector" data-qa="component cart-quantity-selector">
<form name="cartChangeQuantityForm_T8BLACK" method="post" action="/cart/change/T8BLACK">
<div class="quantity-selector" data-qa="component quantity-selector">
<label class="d-none" for="quantity-selector">Cantidad</label>
<select class="    select form-control custom-select js-select-quantity
" data-qa="component select quantity quantity-selector" name='quantity' id='quantity-selector' onchange='this.form.submit();'>
<option value="1">
1
</option>
<option value="2">
2
</option>
<option value="3">
3
</option>
<option value="4">
4
</option>
<option value="5">
5
</option>
<option value="6" selected>
6
</option>
<option value="7">
7
</option>
<option value="8">
8
</option>
<option value="9">
9
</option>
<option value="10">
 10
</option>
<option value="11">
11
</option>
<option value="12">
12
</option>
<option value="13">
13
</option>
<option value="14">
14
</option>
<option value="15">
15
</option>
<option value="16">
16
</option>
</select>
</div>
<input type="hidden" value="T8BLACK" name="groupKey">
<input id="" name="cart_change_quantity_form[_token]" class="form-control" type="hidden" placeholder="" value="E16srgpDolEhlaJOhbkLypJxdbUObW4C7yjnZznQZbQ" />
</form>
</div>

【问题讨论】:

    标签: java selenium automation testng


    【解决方案1】:

    在 HTML 中,下拉菜单通常使用&lt;select&gt; 标记或&lt;input&gt; 标记来实现。在 Selenium 中,为了对下拉菜单执行相同的操作,Selenium WebDrivers 提供了一个名为 Select 的类。

    Selenium WebDriver 的Select 类提供以下方法来选择值:

    1. selectByIndex :此方法通过其索引号选择下拉选项。

    2. selectByValue :此方法按其值选择下拉选项。

    3. selectByVisibleText :该方法根据下拉文本选择下拉菜单。

    工作解决方案:

    WebElement quantity_selector_cart = driver.findElement(By.id("quantity-selector"));
    Select select = new Select(quantity_selector_cart);
    select.selectByVisibleText("2");
    //OR
    select.selectByIndex(1);
    //OR
    select.selectByValue("2");
    

    【讨论】:

    • 非常感谢,这行得通!我确定我以前试过这个,但我记得没有结合 id 选择器检查它,也许这就是问题
    猜你喜欢
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多