【问题标题】:How to click on an element from select using the label name - selenium java [duplicate]如何使用标签名称从选择中单击元素 - selenium java [重复]
【发布时间】:2018-04-20 15:54:50
【问题描述】:

<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 使用了错误的措辞,我深表歉意。 我排除了驱动程序和 get() 网站代码,这些行与我的问题无关。如果我使用错误的方法,请提出其他想法。我有点碰壁了。

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

感谢大家提供的任何帮助。 当我使用唯一的 xpath 时成功单击的示例,由于环境原因,我宁愿不使用它。

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;
            }
        }
    }

}

【问题讨论】:

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


【解决方案1】:

你可以试试这个:

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

或直接:

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

【讨论】:

  • 谢谢 j.barrio。第一个建议很有效,第二个建议也很有效。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-11
  • 2020-10-10
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多