【问题标题】:Not able to select a dropdown using webdriver无法使用 webdriver 选择下拉列表
【发布时间】:2013-01-18 05:34:55
【问题描述】:

我正在使用http://www.makemytrip.com/

以下是Html代码。

<div class="mrgnBot30 clearFix">
<span class="watch_icn flL"></span>
<div class="widget_inner clearFix suggest_me padBot15 flL">
<h3 class="clearFix hasBorderBottom">
<p class="clearFix checkDates">
<span class="check_date flL">
<label for="checkInDate">
Check-in Date:&nbsp;
<span id="checkInDate_day" class="dayLight">(Monday)</span>
</label>
<a id="checkInDateControl" class="cal_icn flL" href="#" tabindex="201"></a>
<input id="checkInDate" class="day flL hasDatepicker" type="text"  autocomplete="false"     value="01/21/2013"     name="searchCriteria.criterion.stayDateRanges[0].start" style="display: none;">
<span class="day date flL">
<select class="selectBox" tabindex="202" style="display: none;">
<span class="left_part flL"></span>
<span class="selectBox center_part flL selectBox-dropdown" style="display: inline-block; -moz-user-select: none;" title="" tabindex="202">
<span class="selectBox-label">21</span>
<span class="selectBox-arrow controls flR">
<a class="select_drop_icon flR" onclick="return false;" href="#"></a>
</span>
</span>
<span class="right_part flL"></span>
</span>
<span class="day month flL">
<select class="selectBox" tabindex="203" style="display: none;">
<span class="left_part flL"></span>
<span class="selectBox center_part flL selectBox-dropdown" style="display: inline-block; -moz-user-select: none;" title="" tabindex="203">
<span class="selectBox-label">Jan,13</span>
<span class="selectBox-arrow controls flR">
<a class="select_drop_icon flR" onclick="return false;" href="#"></a>
</span>
</span>
<span class="right_part flL"></span>
</span>
</span>
<span class="check_date last flL">
<span id="nights" class="nights flL">2 Night(s)</span>
</p>
</div>
</div>

在这里,我有一个下拉菜单来选择 Check in date 和 Check out date。坦率地说,我不知道如何从代码中选择下拉列表的值。此外,我不确定天气是否是下拉菜单。为什么我说在 selenium IDE 中录制时的意思是它记录为click 事件以从下拉列表中选择一个值。

我尝试使用select 语句通过使用firebug 捕获xpath 值从下拉列表中选择一个值。

使用的代码:

 driver.get("http://www.makemytrip.com/");
 driver.findElement(By.xpath("//li[4]/a/span/span")).click();
    Select sel = new Select(driver.findElement(By
            .xpath("//div[2]/div/p/span/span/span[2]")));
    try {
        sel.selectByValue("21");
    } catch (Exception e) {
        e.printStackTrace();
    }

没有任何作用。下面是录制后从 selenium IDE 转换的代码。

Selenese 代码:

driver.get("http://www.makemytrip.com/");
driver.findElement(By.xpath("//div[@id='chf_navigation']/ul/li[4]/a/span/span")).click();
assertEquals("I want to go to", driver.findElement(By.cssSelector("label")).getText());
assertEquals("Online Hotel Booking for Cheap, Budget & Luxury Hotels in India | MakeMyTrip.com", driver.getTitle());
driver.findElement(By.xpath("(//a[@onclick='return false;'])[2]")).click();
driver.findElement(By.xpath("(//a[@onclick='return false;'])[3]")).click();
driver.findElement(By.xpath("(//a[@onclick='return false;'])[4]")).click();
driver.findElement(By.cssSelector("li.selectBox-hover.selectBox-selected > a")).click();
driver.findElement(By.xpath("(//a[@onclick='return false;'])[5]")).click();

查看下拉菜单的步骤:

  1. 打开http://www.makemytrip.com/
  2. 点击酒店链接
  3. 你可以看到Check in Date 下拉菜单。

请提供有用的建议来解决问题。提前致谢。

【问题讨论】:

  • 您应该准确说明您正在测试美国网站。在“全球”上,这绝对不是同一个 HTML
  • 找到了...您正在测试阿联酋航空网站...

标签: javascript html drop-down-menu webdriver selenium-webdriver


【解决方案1】:

您提供了 html 代码,但您没有向我们提供您编写的代码,请提供您为此程序编写的代码,并告诉我们显示的错误消息或异常。

【讨论】:

    【解决方案2】:

    入住日期选择 ID 为 b_checkin_day && b_checkin_month。以下是如何选择它们

    //select the check-in date <select> element
    Element el = driver.findElement(By.id('b_checkin_day'));
    Select sel = new Select(el)
    // go on with selection
    

    查看选择 ID 为:b_checkout_day && b_checkout_month

    这是针对美国版的。印度版本绝对不是一个选择,但与您的 html 不对应

    编辑:发现您说的是阿联酋航空网站。

    对于日期选择,您应该选择:

    Element el = driver.findElement(By.xpath("//input[@id='checkInDate']/following-sibling::span[contains(@class,'date')]/select"))
    

    xpaths 分别用于月份 checkIn、day Checkout && month checkout

    "//input[@id='checkInDate']/following-sibling::span[contains(@class,'month')]/select"
    "//input[@id='checkOutDate']/following-sibling::span[contains(@class,'day')]/select"
    "//input[@id='checkOutDate']/following-sibling::span[contains(@class,'month')]/select"
    

    您的第一个解决方案是使用这些 xpath 来选择正确的值

    您还可以更简单地检查用于填写表格的输入中的正确日期 即将正确的日期设置为

    中的值
    <input id="checkInDate" class="day flL hasDatepicker" type="text"  autocomplete="false"     value="01/21/2013"     name="searchCriteria.criterion.stayDateRanges[0].start" style="display: none;">
    

    应该可以解决问题。 (注意value="01/21/2013")

    EDIT2:

    您是否尝试过使用访问者使用的实际元素来做到这一点?首先,单击下拉箭头 ("//input[@id='checkInDate']/following-sibling::span[contains(@class,'date')]/"),它将使 javascript 日期选择器使用的选择可见。 然后,您应该能够在单击时做出正确的选择: //ul[contains(@class,'selectBox-dropdown') and contains(@style,'block')]//a[@rel="25"]

    如果 25 是您想要的那一天。用于进行选择的&lt;ul&gt;s/&lt;li&gt;s 位于页面底部。看看他们,你会找到正确的xpath

    【讨论】:

    • 感谢您的建议。我按你说的试过了,但对我没有用。我尝试使用 xpath as you suggest 检查存在的元素,它显示为存在,但在尝试选择它时抛出异常为org.openqa.selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with。试过的代码是Select sel = new Select( driver.findElement(By .xpath("//input[@id='checkInDate']/following-sibling::span[contains(@class,'day date flL')]/select"))); sel.selectByVisibleText("28"); Thread.sleep(5000);
    • 所以,你必须扔掉display: none;
    • 请建议如何从 webdriver 执行此操作。我尝试使用 Javascript Executor。我不熟悉Java Script。所以,我没有得到结果。
    • 用另一个解决方案编辑
    猜你喜欢
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多