【问题标题】:selenium webdriver select elementselenium webdriver 选择元素
【发布时间】:2012-03-07 15:31:32
【问题描述】:

我的网站上有一个选择控件。我正在使用页面对象与页面进行交互。如果我这样做(在我的班级下的前 2 行和我的方法中的 selectByValue

@FindBy(id="foo")
private Select foo;

foo.selectByValue("myValue");

它以空指针失败。我也试过没有@FindBy

现在,如果我在我的方法中执行此操作,一切正常并选择正确的项目

Select foo = new Select(sDriver.findElement(By.id("foo")));
foo.selectByValue("myValue");

这是该控件的实际 web sn-p(经过编辑以保护无辜者)

<select id="foo" name="service_name">
    <option selected="selected" value="one">one</option>
    <option value="two">two</option>
    <option value="three">three</option>
</select>

让我说我有一个解决我的问题的方法但是我不明白为什么“正常”路径不起作用。

【问题讨论】:

    标签: selenium webdriver selenium-webdriver


    【解决方案1】:

    那是因为Select 类有这个构造函数:

    Select(WebElement element)
    

    Javadoc

    所以如果你这样做:

    @FindBy(id="foo")
    private WebElement wannabeSelect;
    Select realSelect = new Select(wannabeSelect);
    realSelect.selectByValue("myValue");
    

    它应该工作。

    顺便说一句,我在“解决方法”中使用与您相同的方法,因为我不想在需要 Select 对象时转换新的 WebElement 对象。但不管怎样,

    sDriver.findElement(By.id("foo"));
    

    返回WebElement,这就是它工作的原因。你也可以这样做:

     WebElement wannabeSelect = sDriver.findElement(By.id("foo"));
     Select foo = new Select(wannabeSelect);
    

    【讨论】:

    • 啊,这是有道理的,它似乎应该有效,所以我从来没有真正深入挖掘。我的错。谢谢
    • 注意:如果你在你的类中包含 Select 声明和强制转换,就在私有 WebElement 声明的下面,当类被实例化时你会得到运行时错误;为避免这种情况,您可以将 Select 声明和类放在与屏幕控件交互的方法中。同样不理想,但它似乎确实有效。
    • 使用这种方法,页面对象应该在页面完全加载并且对象存在并且在驱动程序中可见之后被初始化。要代理它,请查看my implementation
    【解决方案2】:

    选择选项值有两种方式:

    一个:

    // Denotes option value - technical name
    select.selectByValue(fieldValue);       
    

    两个:

    // Denotes option text that is actually visible to be selected
    select.selectByVisibleText(fieldValue);
    

    【讨论】:

    • 和 select.selectByIndex(intValue)
    【解决方案3】:

    我实现此目的的其他方法是对我的所有 onchange 下拉选择框使用以下方法。传递 id 和 selection 就可以了

    public void onchangedropdownselection(String object, String value) {
            driver.findElement(By.id(object)).sendKeys(value);
            driver.findElement(By.id(object)).sendKeys(Keys.UP);
            driver.findElement(By.id(object)).sendKeys(Keys.DOWN);
        }
    

    通过 up 和 down 我们正在初始化脚本 onchange.......

    【讨论】:

      猜你喜欢
      • 2019-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      • 1970-01-01
      • 1970-01-01
      • 2014-02-20
      • 1970-01-01
      相关资源
      最近更新 更多