Selenium - 如果已经存在,如何检查和增加下拉值?

时间:2015-07-30 13:41:16

标签: javascript java selenium selenium-webdriver automation

我正在尝试使用Selenium Webdriver(Java)自动化应用程序。我的Web应用程序有一个Add按钮。单击添加按钮后,将启用下拉列表。如果再次单击,将启用第二个下拉列表。每个后续下拉列表的ID都是page1,page2,page3 ..等等..

我想要做的是当我打开页面时,我需要查看页面中是否有任何下拉列表,如果是,则选择下一个下拉列表值,然后从下拉列表中选择一个值。 / p>

这是我当前的代码,我手动选择每个下拉列表并选择它们各自的值。:

driver.findElement(By.id("addPage")).click();
new Select(driver.findElement(By.id("page0"))).selectByVisibleText("ABCD");
driver.findElement(By.id("addPage")).click();
Thread.sleep(1000);
new Select(driver.findElement(By.id("page1"))).selectByVisibleText("CDEF");
driver.findElement(By.id("addPage")).click();
Thread.sleep(1000);
new Select(driver.findElement(By.id("page2"))).selectByVisibleText("EFGH");
driver.findElement(By.id("addContact")).click();

2 个答案:

答案 0 :(得分:2)

我会尝试按照以下方式做一些事情,假设你的页面中没有其他下拉元素(我从你的问题中假设是这种情况)。

    private EventWaitHandle _waitOnTwo = new EventWaitHandle(false, EventResetMode.AutoReset);
    public void PhaseTwo()
    {
        try
        {
            string phaseTwoDir = "C:\\PhaseTwo";
            string phaseThreeDir = "C:\\PhaseThree";

            Action<string> processFiles = new Action<string>((file) => { File.Move(file, Path.Combine(phaseThreeDir, Path.GetFileName(file))); _waitOnTwo.Set(); });
            Func<bool> continueCondition = new Func<bool>(() => { return (Directory.GetFiles(phaseTwoDir).Count() > 0 || _waitOnOne.WaitOne(60000)); });

            // process files
            Process(phaseTwoDir, processFiles, continueCondition);
        }
        finally
        {
            _waitOnTwo.Set();
        }
    }

    private void Process(string directory, Action<string> processFileWork, Func<bool> continueCondition)
    {
        while (continueCondition())
        {
            foreach (string file in System.IO.Directory.GetFiles(directory))
            {
                // if canceled, throw
                _cts.Token.ThrowIfCancellationRequested();

                // process file
                processFileWork(file);
            }

        }
    }

您可以尝试使用页面上每个选择元素的ID填充数组,并搜索与模式匹配的数组&#34; page \ d&#34;从那里开始

答案 1 :(得分:1)

我认为您可以找到idpage开头的任何选择元素,获取id属性值,然后点击下一页的下拉菜单。示例实施:

WebElement existingPage = driver.findElement(By.cssSelector("select[id^=page]"));

String nextPageID = Integer.toString(Integer.parseInt(existingPage.getAttribute("id").replaceAll("\\D+", "")) + 1);
Select nextPage = new Select(driver.findElement(By.id("page" + nextPageID)));

并且,正如@Iridann正确指出的那样,要检查状态,请捕获NoSuchElementException异常:

try {
    WebElement existingPage = driver.findElement(By.cssSelector("select[id^=page]"));
    // ...
} catch (NoSuchElementException e) {
    // no pages found
}