从下拉列表中选择仅包含特殊文本的下拉列表

时间:2018-03-05 10:23:34

标签: java selenium-webdriver

有人可以帮我解决以下问题: 我有下拉截图,如下面的屏幕截图所示:

enter image description here

在页面上,HTML看起来像:

<form class="row" method="GET" action="/moderators/competitions">
<input type="hidden" name="id" value="3">
<div class="column large-2">
<label for="period"><strong>&nbsp;<br>Period:</strong></label>
</div>
<div class="column large-8">
<select id="period" name="period">
<option value="39">01. Jan 2019 - 31. Jan 2019 - Open</option>
<option value="38">01. Dec 2018 - 31. Dec 2018 - Open</option>
<option value="37">01. Nov 2018 - 30. Nov 2018 - Open</option>
<option value="36">01. Oct 2018 - 31. Oct 2018 - Open</option>
<option value="35">01. Sep 2018 - 30. Sep 2018 - Open</option>
<option value="34">01. Aug 2018 - 31. Aug 2018 - Open</option>
<option value="33">01. Jul 2018 - 31. Jul 2018 - Open</option>
<option value="32">01. Jun 2018 - 30. Jun 2018 - Open</option>
<option value="31">01. May 2018 - 31. May 2018 - Open</option>
<option value="30">01. Apr 2018 - 30. Apr 2018 - Open</option>
<option value="29">01. Mar 2018 - 31. Mar 2018 - Open</option>
<option value="28" selected="selected">01. Feb 2018 - 28. Feb 2018 - Frozen</option>
<option value="27">01. Jan 2018 - 31. Jan 2018 - Closed</option>
<option value="410">01. Dec 2017 - 31. Dec 2017 - Closed</option>
<option value="409">01. Nov 2017 - 30. Nov 2017 - Closed</option>
<option value="408">01. Oct 2017 - 31. Oct 2017 - Closed</option>
<option value="406">01. Sep 2017 - 30. Sep 2017 - Closed</option>
<option value="407">01. Aug 2017 - 31. Aug 2017 - Closed</option>
<option value="405">01. Jul 2017 - 31. Jul 2017 - Closed</option>
<option value="404">01. Jun 2017 - 30. Jun 2017 - Closed</option>
<option value="403">01. May 2017 - 31. May 2017 - Closed</option>
<option value="735">01. Apr 2017 - 30. Apr 2017 - Frozen</option>
<option value="402">01. Mar 2017 - 31. Mar 2017 - Closed</option>
<option value="401">01. Feb 2017 - 28. Feb 2017 - Closed</option>

我必须只选择带有文字的少数人'Frozen'Problem是冻结的单词只是可见文本的一部分,而不是整个文本。以下是我的尝试,但没有成功:

List<WebElement> competitionsFrozen = driver.findElements(By.xpath("//*[@id=\"period\"]/option[contains(text(),'Frozen')]"));
    for (int k = 0; k < competitionsFrozen.size(); k++) {
        System.out.println(competitionsFrozen.get(k).getText());
        Select dropdown1 = new Select(driver.findElement(By.xpath("//*[@id=\"period\"]/option[contains(text(),'Frozen')]")));
        dropdown1.selectByVisibleText("Frozen");
        Thread.sleep(5000);

另外,下面的代码应该在选择“frozens”之后点击“Go!”按钮,几秒钟后,点击下一个名为“re-freeze”的按钮

        WebElement goButton = driver.findElement(By.xpath("//form[@class='row']/div[3]/input"));
        goButton.click();
        Thread.sleep(5000);
        WebElement reFreeze = driver.findElement(By.xpath("//form[@class='row']/div[4]/button"));
        reFreeze.click();
        Thread.sleep(5000);            
    }

请,协助。提前谢谢

1 个答案:

答案 0 :(得分:0)

使用以下代码找到解决方案:

 List<WebElement> competitionsFrozen = driver.findElements(By.xpath("//*[@id=\"period\"]/option[contains(text(),'Frozen')]"));
    for (int k = 0; k < competitionsFrozen.size(); k++) {
        List<WebElement> competitionsFrozen2 = driver.findElements(By.xpath("//*[@id=\"period\"]/option[contains(text(),'Frozen')]"));
        System.out.println("");
        System.out.println("*****");
        System.out.println(competitionsFrozen2.get(k).getText());
        WebElement option = competitionsFrozen2.get(k);
        option.click();
        BaseTest.sleepSeconds(4);
        WebElement goButton = driver.findElement(By.xpath("//form[@class='row']/div[3]/input"));
        goButton.click();
        BaseTest.sleepSeconds(4);
        WebElement reFreeze = driver.findElement(By.xpath("//form[@class='row']/div[4]/button"));
        reFreeze.click();
        BaseTest.sleepSeconds(4);
        WebElement afterReFreeze = driver.findElement(By.xpath("//*[@id=\"period\"]/option[contains(@selected,'selected')]"));