如何使用标签名称选择select中的元素 - selenium java

时间:2017-11-08 04:30:47

标签: xpath selenium-webdriver css-selectors selenium-chromedriver

enter image description here

<div class="left">
<select id="hidebox" class="ays-ignore" size="8">
<ul><option value="103249">260 - OMAHA 30TH ST</option></ul> 
<ul><option value="103266">540 - UNION CITY</option></ul>
<ul><option value="3">800 - BETHLEHEM</option></ul>
<ul><option value="103271">430 - DALLAS SOUTH</option></ul>
<ul><option value="103270">410 - DALLAS</option></ul>
<ul><option value="100966">530 - TRACY</option></ul>
<ul><option value="103272">420 - FORT WORTH</option></ul>
<ul><option value="97224">820 - QUAKERTOWN</option></ul>
<ul><option value="103324">520 - SACRAMENTO</option></ul>
</select>
</div>

您好, 我正在尝试点击基于标签“820 - QUAKERTOWN”的元素并且我的方法不正确或我遗漏了某些原因当我逐步通过时,我看到整个列表被返回但是没有点击所需的值。 xpath是正确的,似乎返回正确的记录列表,但没有应用单击。如果我使用Selenium和Java新的错误措辞,我表示歉意。 我排除了驱动程序和获取()网站代码,这些线条并不适合我的问题。如果我使用错误的方法,请建议其他想法。我有点碰壁了。

我的期望是可以使用标签文本点击行,例如“800 - BETHLEHEM”或列表中的任何其他内容。我确实尝试了独特的xpath方法并且它有效,但是当我在其他选项值不同的环境中运行时,我的测试失败了。

感谢您提供的任何帮助。 成功点击的示例,当我使用一个独特的xpath时,由于环境原因,我宁愿不使用它。

enter image description here

package com.usc.uscspace.test.customer;

import org.junit.Assert;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebElement;
import org.testng.annotations.Test;

import java.util.List;

public class CreateTest extends AbstractTestClass {

    final static String legacyWarehouse = "800 - BETHLEHEM";


    @Test
    public void createCustomerTest() {
        List<WebElement> pushWhseList = driver.findElements(By.xpath(".//*[@id='hidebox']"));

        int total_node = pushWhseList.size();

        for (int i = 0; i < total_node; i++) {
            String list = pushWhseList.get(i).getText();
            if (list.contains(legacyWarehouse)) {
                pushWhseList.get(i).click();
                break;
            }
        }
    }

}

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

Select mySelect = new Select(driver.findElement(By.xpath(".//*[@id='hidebox']")));
mySelect.selectByVisibleText(legacyWarehouse);

或直接:

driver.findElement(By.xpath(".//ul/option[text()='"+legacyWarehouse+"']")).click()