选择具有searchbox的下拉项时元素不可见异常

时间:2016-09-01 14:53:02

标签: selenium testing search drop-down-menu combobox

我想从下拉列表中选择一个包含搜索框的项目。我的硒代码是:

public Cursor getAllWord(String table)
{
    Cursor mCursor = mDb.query(table, new String[] {"_id","word","definition","favourite"},
            null, null, null,null, " word COLLATE NOCASE");

    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;
}

public Cursor getWordByName(String table, String inputText) throws SQLException {
    Cursor mCursor = null;
    if (inputText == null  ||  inputText.length () == 0)  {
        mCursor = mDb.query(table, new String[] {"_id","word","definition","favourite"},
                null, null, null,null, " word COLLATE NOCASE");

    }
    else {
        mCursor = mDb.query(true, table, new String[] {"_id","word","definition","favourite"},
                "word" + " like '" + inputText + "%'", null,
                null, null, " word COLLATE NOCASE",null);
    }
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;
}

当我正在调试时,此代码正在运行,但是当我运行我的脚本时,它会抛出异常: org.openqa.selenium.ElementNotVisibleException:元素不可见 在线:

WebElement select = BrowserSetup.driver.findElement(By.xpath("//div[contains(@class,'chosen-container')]"));
select.click();

List<WebElement> dropDowns = BrowserSetup.driver.findElements(By.className("chosen-results"));

WebElement dropDownOne = dropDowns.get(0); // perform further action
dropDownOne.click();

Html代码是:

WebElement dropDownOne = dropDowns.get(0);  
dropDownOne.click();

我该如何解决?

3 个答案:

答案 0 :(得分:0)

不要点击它,而是按照here的说明使用选择

Select select = new Select(driver.findElement(By.id("CustomerCard_state")));
select.deselectAll();
select.selectByIndex(0);

您还可以通过可见文字等进行选择。请参阅documentation on Select

答案 1 :(得分:0)

有多种方法可以从option中选择dropdown

Select select = new Select(driver.findElement(By.id("CustomerCard_state")));
select.selectByVisibleText("Arizona");

OR

Select select = new Select(driver.findElement(By.id("CustomerCard_state")));
dropdown.selectByIndex(2);

OR

Select select = new Select(driver.findElement(By.id("CustomerCard_state")));
dropdown.selectByValue("AZ");

此外,您可以参考此link。 希望这会帮助你。

答案 2 :(得分:0)

  

当我正在调试时,此代码正在运行

解决方案#1:

这是因为,在进行调试时,应用程序和测试执行之间会发生同步。因此,请在点击下拉值之前引入一些延迟

  

但是当我运行我的脚本时   抛出异常如下:   org.openqa.selenium.ElementNotVisibleException:元素不可见   线:   WebElement dropDownOne = dropDowns.get(0);
  dropDownOne.click();

解决方案#2: 这是因为,从搜索框下拉显示在运行中,因此不会附加到当前元素(就像另一帧)。因此,点击激活下拉活动以执行selenium点击操作

为此您的代码可能看起来像,

List<WebElement> dropDowns = BrowserSetup.driver.findElements(By.className("chosen-results"));
dropDownOne = dropDowns.get(0);
driver.findElement(By.className("chosen-results")).click(); // make focus on drop down results elements
dropDownOne.click();

如果解决方案#1不起作用,解决方案#2应该可以正常工作