【问题标题】:unable to select from ui li elements in selenium java无法从 selenium java 中的 ui li 元素中进行选择
【发布时间】:2016-01-22 11:01:17
【问题描述】:

我正在自动添加“http://www.fnp.com/the-sweet-surprises-genpr-143431-e.html”网站的卡片流程。我正在使用 TestNG Structure 编写代码。我被困在“运输选项”框中的任务中。 我在控制台中得到空值。 下面是我的 testNG 程序

    package script;

    import java.util.Iterator;
    import java.util.List;
    import java.util.concurrent.TimeUnit;
    import org.junit.Test;
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.support.ui.Select;

    import pom.Homepage_POM;

    public class mis {
            public static WebDriver driver;
        public static void main(String a[])
        {
            driver = new FirefoxDriver();
            driver.manage().window().maximize();
            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
                  driver.get("http://www.fnp.com/the-sweet-surprises-genpr-143431-e.html");

 driver.findElement(By.id("tagsf2")).sendKeys("Gandhinagar");
     String xp = "//ul/li/a[@class='ui-corner-all']";
                    List<WebElement> allList = driver.findElements(By.xpath(xp));
                    int count = allList.size();
                                    for (int i = 0; i < count ; i++) 
                    {
                        String name = allList.get(i).getText();
                        //System.out.println(name);
                        if(name.contains("Gandhinagar"))
                        {
                            allList.get(i).click();
                            break;
                        }

                } 
                    List<WebElement> allElements = driver.findElements(By.xpath("//div[@id='ddShipingModep1_container']/ul/li")); 
            for (int i = 0; i < allElements.size() ; i++) 
                        {
                                String name2 = allElements.get(i).getText();
                            System.out.println(name2);
                             if(name2.contains("Standard Delivery [  Rs. 0 ]"))
                                {
                                    allElements.get(i).click();
                                    break;
                                }

下面是 HTML 代码

<div class="textbox">
<div id="plsenter" style="display:none">Only standard delivery available for Mother's Day</div>
<div id="anand" class="pro_detail_form_inn flot-right">
<label>2. Shipping option</label>
<input id="ddShipingModep1_input" class="selectbox" type="text" autocomplete="off" readonly="readonly"/>
<div id="ddShipingModep1_container" class="selectbox-wrapper" style="display: none; width: 274px;">
<ul>
<li id="ddShipingModep1_input_option1" class="">Select Shipping Mode</li>
<li id="ddShipingModep1_input_SHMD-10" class="">Standard Delivery [  Rs. 0 ]</li>
<li id="ddShipingModep1_input_SHMD-768" class="selected">Fix Time Delivery [  Rs. 200 ]</li>
<li id="ddShipingModep1_input_SHMD-781">Midnight Delivery [  Rs. 250 ]</li>
</ul>
</div>
<select id="ddShipingModep1" class="inp_pop_quick_view" onchange="changeShipmentTime()" name="Items" style="display: none;">
<input id="valentineDisabled" type="hidden" value="false"/>
<input id="isValentinerose" type="hidden" value="false"/>
</div>

【问题讨论】:

  • 粘贴你的控制台日志
  • @niharika_neo 控制台看起来是空的。可以直接运行这段代码

标签: java html selenium


【解决方案1】:
WebDriver driver=new FirefoxDriver();

driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get("http://www.fnp.com/the-sweet-surprises-genpr-143431-e.html");
driver.findElement(By.id("tagsf2")).sendKeys("Gandhinagar");

/*下面三行代码是从城市名称下拉框中选择“Gandhinagar”选项*/

WebElement selectShippingModeInput =    driver.findElement(By.id("ddShipingModep1_input"));
selectShippingModeInput.click();     
selectShippingModeInput =    driver.findElement(By.id("ddShipingModep1_input"));
selectShippingModeInput.click(); 

/* 下面的代码 从“运输选项”的下拉框中获取所有选项*/

List<WebElement>     options=driver.findElements(By.xpath("//div[@id='ddShipingModep1_container']/ul/li"));
for(WebElement option:options){

/*下面的代码获取下拉项的文本*/

String name=option.getText();

/下面两行代码是重点关注选择框/

   selectShippingModeInput = driver.findElement(By.id("ddShipingModep1_input"));     
   selectShippingModeInput.click(); 

/*从下拉框中选择下拉项“标准交付[Rs.0]*/

if(name.equals("Standard Delivery [ Rs. 0 ]")){
               selectShippingModeInput.click();
               option.click();
               break;

                                            }
                       }

【讨论】:

  • 欢迎来到 StackOverflow!添加一些解释您的代码如何解决问题可能会有所帮助。
【解决方案2】:

您必须单击&lt;input id="ddShipingModep1_input" 两次,然后将显示选项。见以下代码:

...
WebElement selectShippingModeInput = driver.findElement(By.id("ddShipingModep1_input"));
selectShippingModeInput.click();        
selectShippingModeInput = driver.findElement(By.id("ddShipingModep1_input"));
selectShippingModeInput.click();
try {
    Thread.sleep(1000);
} catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

List<WebElement> allElements = driver.findElements(By.xpath("//div[@id='ddShipingModep1_container']/ul/li"));
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    相关资源
    最近更新 更多